2014-05-22 3 views
0

Как отображать только одну строку в случайном порядке одновременно с БД. Все работает нормально, но отображаются все строки. благодаряshuffle: Показывать только одну строку одновременно

<?php        
$sql = "SELECT id,name FROM table "; 
$rows = array(); 
$result = $objCon->query($sql);  
    while($row = $result->fetch_assoc()) 
    {      
    $rows[] = $row; 
    }          
shuffle($rows); 
echo '<ol>'; 
foreach($rows as $row) 
    { 
    echo '<li><h3>'.$row['id'].' = '.$row['name'].'</h3></li>'; 
    } 

echo '</ol>';       

?> 
+0

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

+1

'$ sql =" SELECT id, name FROM table ORDER BY RAND() LIMIT 1 ";' если вы используете mysql – Christoph

ответ

0

Вы можете сделать это с помощью PHP:

.... 
shuffle($rows); 
$randomRow = reset($rows); 

.... 

Но лучший способ это изменить SQL-запрос:

$query = "SELECT id, name FROM table ORDER BY RAND() LIMIT 1;" 
+0

Привет, спасибо. Это работает :-) – letris

+0

@letris, пожалуйста, вы можете отметить мой голос и отметить мой ответ. :) –

0

Изменить ваш запрос SQL:

ВЫБРАТЬ id, name FROM table ORDER BY RAND() LIMIT 1;

0
<?php 
    $sql = " 
    SELECT id, name 
    FROM table 
    ORDER BY RAND() 
    LIMIT 1 "; 
    $result = mysql_query($sql); 

    // As you are only return a single row you do you require the while() 
    $row = mysql_fetch_array($result); 

    echo '<ol>'; 
     echo '<li><h3>'.$row['id'].' = '.$row['name'].'</h3></li>'; 
    echo '</ol>'; 
?> 

Добавляя ORDER BY RAND() в вашем SQL запроса вы спрашиваете MySQL случайным образом упорядочить результаты, то в LIMIT, чтобы ограничить количество строк, которые вы хотели бы вернулись.

Пример кода написан на основе выбора одной строки. Если вы хотите больше, например, 5, вам нужно будет добавить цикл while.

+0

Привет. Спасибо за ответ. – letris

Смежные вопросы