2013-07-27 6 views
-2

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

Благодаря

$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++; 
} 
+0

попробуйте использовать 'union' – bansi

+0

Вы пробовали что-то, что не сработало? –

+0

Я вижу, что вы значительно обновили свой вопрос некоторое время назад, но вы больше ничего не просите. Можете ли вы перечитать и переписать свой вопрос, пожалуйста? Сейчас это немного запутанно. –

ответ

3

Используйте UNION clause:

$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(poseted, прежде чем 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_*, они deprecated и будут удалены в будущих версиях PHP. Вместо этого используйте MySQLi или PDO. Для получения более подробной информации см. Why shouldn't I use mysql_* functions in PHP?.

+0

thankx, помогло бы и дальше извлекать результаты. – ZAW

+0

@ ZeheerAW - Хорошо, я скоро обновлю ответ. –

0

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

В запросе вы должны использовать Union, чтобы получить один большой список записей. Однако, как раз делаю

SELECT * FROM `login` WHERE `user` = '$word' 
UNION 
SELECT * FROM `login` WHERE `user` != '$word' ORDER BY RAND() LIMIT 3 

даст вам список записей, где user = $word в первой части и случайных 3 других записях.

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

+0

У меня есть вопрос об обновлении, посмотрим. – ZAW

0

Вот код 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; 

Вам нужно будет заменить заглавные слова с тем, что необходимо. Несколько объяснений:

  • заменяющие * лишь то, что вам нужно из таблиц (использовать меньше памяти)
  • первые результаты вставки в массив, так что вы можете в случайном порядке (от MySQL, вы всегда будете иметь первый выведите результаты первого запроса)
  • построить html и вывести его все сразу (выполнение нескольких echo зависит от буферизации, чтобы не отправлять его в браузер, но этот параметр может быть выключен: What is output buffering).
Смежные вопросы