0

В двух выборках из таблиц по 500 объектов через цикл определяю нужные для обновления. По отдельности всё получает, а вот вложенный цикл останавливается после первого прохода. Может ли это быть связано с mysql_fetch_assoc или что-то не так с кодом или количеством проходов (250000 выходит и много ли это)?

$result = mysql_query("select * FROM pages_router WHERE id_site = 23");
$resultMeta = mysql_query("select * FROM pages_meta");
$out = '';
while( $row = mysql_fetch_assoc($result)) {
    $id = $row['id'];
    $link1 = $row['link1'];
    $out .= $id." - ";
    if (in_array('itemView', explode('/', $link1))) {
        $link2 = $row['link2'];
        while( $rowMeta = mysql_fetch_assoc($resultMeta)) {
            $linkMeta = $rowMeta['name'];
            $out .= $linkMeta."<br>";
            // if($link2 == $rowMeta['name']) {
            if(!strcmp($link2, $linkMeta)) {
                $idMeta = $rowMeta['id'];
                // print $idMeta."<br>";
                // $query = "update pages_meta_edit_empty set title='', descr='', keyw='', title_ru='', descr_ru='', keyw_ru='' where id='$idMeta'";
                // print $query.'<br>';
                // mysql_query($query);
            }
        }
    }

} echo $out;

Я понимаю что можно сделать через объединение таблиц и это правильно и я так и сделал.

$result = mysql_query("select title, descr, keyw, title_ru, descr_ru, keyw_ru, link1, a.id id FROM pages_meta a INNER JOIN pages_router b ON a.name = b.link2 WHERE b.id_site = 23");
while( $row = mysql_fetch_assoc($result)) {
    $id = $row['id'];
    $link1 = $row['link1'];
    if (in_array('itemView', explode('/', $link1))) {
        // print $id." - $link1<br>";
        $query = "update pages_meta set title='', descr='', keyw='', title_ru='', descr_ru='', keyw_ru='' where id='$id'";
        mysql_query($query);
    }

}

Только не понял почему это не сработало в первом коде?

  • Предлагаю вам такой вариант: Debugging (Отладка). Далее поставить breakpoint в районе 1- до if и до второго while и смотреть, что в массивах, что в каждой переменной и явно самому выявить проблему – Алексей Шиманский Jan 21 '21 at 12:31
  • @АлексейШиманский проверял в массивах все в порядке – Олександр Давиденко Jan 21 '21 at 12:40
  • Как проверяли? Значит не всё в порядке)) – Алексей Шиманский Jan 21 '21 at 12:42
  • 2
    Гм... Ну вот обрабатываете Вы. значит, первую запись из $result... в ходе обработки перебираете весь набор в $resultMeta... потом внешний цикл берёт вторую запись... точно ли то, что $resultMeta опять начнёт перебираться от самого начала? (просто не знаю, внутренний указатель - это свойство рекордсета или итератора по нему) – Akina Jan 21 '21 at 13:14
  • @Akina Вы правы, тоже пришёл к этому после написания вопроса. Логично, что нужно сбросить указатель чтобы снова разбирать с начала. Перед вторым циклом поставил и всё заработало как было нужно mysql_data_seek( $resultMeta, 0 ); – Олександр Давиденко Jan 21 '21 at 17:06

0 Answers0