Цель этого запроса – получить истинное изображение плюс 3 случайных сгенерированных изображения из одной таблицы, а затем показать их случайным образом. Пользователь (ребенок) должен выбрать правильное изображение.
благодаря
$sql= "SELECT * FROM `login` WHERE `user` = '$word'"; " UNION" "SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3"; $row2=mysql_query($sql); $i=1; while ($r = mysql_fetch_array($row2)) { echo '<td> '; echo '<img src="sigg/'.$r['img'].'" width="130" height="130" /><br>'; echo $r['user']; echo '</td>'; $i++; }
Используйте предложение UNION
:
$sql = "(SELECT * FROM `login` WHERE `user` = '$word')"; $sql.= " UNION"; $sql.= " (SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3)"; $sql.= " ORDER BY RAND()";
Чтобы получить результаты, вы можете использовать, например, MySQLi
(заданный до того, как OP добавил свой код с mysql_*
) :
$MySQL=new mysqli("localhost", "username", "password", "database"); $query = $MySQL -> query($sql); while ($entry = $query -> fetch_row()) { // $entry is an array with the results, use for example: echo $entry[0]; // will return the first column of your table echo $entry[1]; // will return the second column of your table // try also: var_dump($entry); // outputs everything for testing purposes }
Пожалуйста, не используйте функции mysql_*
, они устарели и будут удалены в будущих версиях PHP. Вместо этого используйте MySQLi
или PDO
. См. Почему я не должен использовать функции mysql_ * в PHP? Больше подробностей.
Ваш запрос недостаточно ясен, чтобы обеспечить надежный ответ, поэтому я постараюсь ответить на него как можно лучше.
Вы должны использовать Union в своем запросе, чтобы получить один большой список записей. Однако, просто
SELECT * FROM `login` WHERE `user` = '$word' UNION SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3
даст вам список записей, в которых user = $word
в первой части и случайных 3 других элемента.
Как я уже сказал, я не знаю точной цели этого, но я думаю, что вам лучше запросить весь список с вашего сервера базы данных.
Вот код php:
$connection = mysql_connect(HOST, USER, PASSWORD); mysql_select_db(DATABASE_NAME, $connection); $sql = "SELECT img, user FROM `login` WHERE `user` = '{$word}' UNION SELECT img, user FROM `login` WHERE `user` != '{$word}' ORDER BY RAND() LIMIT 3"; $results = mysql_query($sql, $connection); $rows = array(); // Insert results in a new array to shuffle it while ($row = mysql_fetch_array($results)) { $rows[] = array( 'img' => $row['img'], 'user' => $row['user'] ); } shuffle ($rows); // Randomize order // Construct HTML $html = ''; foreach ($rows as $entry) { $html .= '<td><img width="130px" height="130px" src="sigg/' . $entry['img'] . '"> $html .= $user . '</img></td>'; } echo $html;
Вам нужно будет заменить заглавные слова тем, что необходимо. Несколько объяснений:
*
только тем, что вам нужно из таблиц (используйте меньше памяти) echo
зависит от буферизации, чтобы не отправлять его в браузер, но этот параметр может быть выключен: что такое буферизация вывода ).