Запустите запрос mysql в запросе mysql

Привет, я пытаюсь запросить мою таблицу базы данных «shout_out», во время цикла while у меня есть оператор if, чтобы проверить, был ли столбец «convers_id» изменен с no_reply. если это так, я хочу, чтобы другой запрос выполнялся и получал все строки из таблицы крика_out_reply, которые имеют один и тот же столбец «convers_id». Я пытаюсь сделать макет похожим на «стену» в фейсбуке. Кто-то делает комментарий, а другие могут ответить на этот комментарий, причем ответ находится под исходным комментарием.

Я продолжаю получать, что mysqli_query($dbc, $query_shout_out_reply) не удалось. но есть ответы с тем же "convers_id"

$query_shout_out = "SELECT * FROM shout_out WHERE sent_to = '$username' ";
$shout_out_query = mysqli_query($dbc, $query_shout_out);

if (mysqli_num_rows($shout_out_query) != 0) {
    while ($row = mysqli_fetch_array($shout_out_query)) {
        echo '<td class="shout_out_display" width="550">';
        echo $row['message'] . ' <br/><br/> From ' . $row['sent_by'] . ' at ' . $row['date_sent'];
        echo '</td></tr>';
        echo $row['convers_id'];
        if ($row['convers_id'] != "no_reply") {
            $query_shout_out_reply = "SELECT * FROM shout_out_reply WHERE convers_id = " . $row['convers_id'];
            $shout_out_reply_query = mysqli_query($dbc, $query_shout_out_reply);

            while ($reply_row = mysqli_fetch_array($shout_out_reply_query)) {
                echo ' <tr width="550"><td width="125" > &nbsp </td>';
                echo '<td width="425"  class="shout_out_reply_display">';
                echo $reply_row['message'] . '<br/><br/>Reply From ' . $reply_row['sent_by'] . ' at ' . $reply_row['date_sent'];
                echo '</td></tr>';
            }
        }

    }
}

person Cjueden    schedule 15.12.2011    source источник
comment
У меня нет времени отвечать, но обычно выполнять запросы в цикле — плохая идея.   -  person Levi Morrison    schedule 16.12.2011
comment
что значит не удалось? Нет возвращенных строк?   -  person Robert    schedule 16.12.2011
comment
Я просто говорю, что логическое значение не удалось, когда я делаю var_dump()   -  person Cjueden    schedule 16.12.2011
comment
тебе действительно нужна эта петля? возможно, вы можете сначала присоединиться к таблицам, а затем запустить только один цикл - вложенный запрос не требуется!   -  person reox    schedule 16.12.2011
comment
Это было бы хорошо, но я не совсем понимаю соединение, и если бы я мог заставить это работать, я бы предпочел.   -  person Cjueden    schedule 16.12.2011


Ответы (2)


SELECT * FROM shout_out AS so LEFT JOIN shout_out_reply AS sor ON sor.convers_id = so.convers_id WHERE so.sent_to = '$username' AND so.convers_id != 'no_reply'

Ключевым моментом здесь является использование оператора SQL JOIN. Это даст вам результаты из обеих таблиц в одном выражении. ... тогда вам не нужно проходить цикл. делая все эти запросы sql.

person Prpl_Ppl_Etr    schedule 15.12.2011
comment
Мои таблицы настроены так: sent_by | сообщение | отправлено_до даты_отправлено | IP | convers_id | answer, а convers_id — это FK в Shout_out_reply, а Primary — это convers_id в Shout_out, как я могу отличить их друг от друга? - person Cjueden; 16.12.2011
comment
...используя псевдонимы, определенные в заявлении, которое я предоставил. Но разве это не одни и те же ценности? Если нет, вы можете сделать это: SELECT so.convers_id AS so_con, sor.convers_id as sor_con FROM... ...или я вас неправильно понимаю? - person Prpl_Ppl_Etr; 16.12.2011
comment
Я думаю, что это в процессе написания, но мне нужно получить несколько комментариев, таких как сообщение OG, затем ответы, затем начать со следующего сообщения OG и сколько угодно ответов. - person Cjueden; 16.12.2011
comment
Итак, вы хотите сгруппировать результаты? ... чтобы у вас был исходный пост, затем все ответы на этот пост, затем следующий исходный пост, затем все ответы на этот и т. д.? - person Prpl_Ppl_Etr; 16.12.2011

вы можете создавать таблицы такой структуры, которая облегчит вам создание объединений и сложных запросов. Прежде всего, вам нужно понять, как работают соединения и когда их нужно использовать. проверьте Google для этого.

person Alexander Gharibashvili    schedule 15.12.2011