При возврате без результатов

#php

#php

Вопрос:

У меня есть следующий запрос в существующем скрипте — но он не всегда возвращает значение, хотя оно должно основываться на том, что есть в базе данных. В базе данных есть много вещей, которые он ДОЛЖЕН захватить — они там есть.

Не вижу в этом ничего плохого — но я почти этим больше не занимаюсь 🙂 Видишь что-нибудь?

 $query = "SELECT id FROM xtags WHERE tag_id = '$tagid' ORDER BY RAND() Limit 2";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){

            $query = "SELECT * FROM xtable WHERE id = '$row[id]'";
            $result = mysql_query($query) or die(mysql_error());
            $row2 = mysql_fetch_assoc($result);
            echo $row2[title];

}
  

Комментарии:

1. неэффективно, может быть выполнено с помощью 1 запроса. learn ПРИСОЕДИНИТЬСЯ

2. Вы могли бы сделать то же самое только с одним SQL-запросом

3. Без сомнения — просто выполняю некоторую отладку здесь.

4. исправление запросов, чтобы вам не приходилось использовать цикл, решит проблему в первую очередь.

Ответ №1:

$result используется внутри цикла и снаружи, попробуйте создать новую переменную внутри и не использовать повторно внешнюю.

Ответ №2:

Вы повторно используете $result переменную внутри цикла, которая перезаписывает значение для использования в while условии. Используйте другое имя для $query и $result внутри цикла.

Комментарии:

1. Дело не в этом, Ник. Все еще возвращая случайные наборы «без результата».

2. .. и вы уверены, что ваши инструкции SQL верны? Похоже, что в вашем коде нет ничего неправильного, из-за чего ваши SQL-запросы становятся причиной дальнейших проблем, с которыми вы можете столкнуться.

Ответ №3:

Я не знаю, нормально ли это, но вы используете $ result дважды, один перед «while», а другой внутри «while».

Я бы лично разделил строку и переменную $row.

Почему бы не использовать var_dump() для просмотра $row и других переменных???

Ответ №4:

Я не понимаю, что вы пытаетесь сделать на самом деле, но попробуйте это:

 $query = "SELECT id FROM xtags WHERE tag_id = '".$tagid."' ORDER BY RAND() Limit 2";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){

            $query2 = "SELECT * FROM xtable WHERE id = '".intval($row[id])."'";
            $result2 = mysql_query($query2) or die(mysql_error());
            $row2 = mysql_fetch_assoc($result2);
            echo $row2[title];

}
  

Ответ №5:

Проблема решена — выполнил оператор join.