2014-05-22 2 views
0

DB에서 한 번에 한 행을 동시에 무작위로 표시하는 방법. 모든 것이 잘 작동하지만 모든 행이 표시됩니다. 감사셔플 : 동시에 한 행 만 표시

<?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 테이블 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 요청 :

SELECT를 id, name FROM 테이블 ORDER BY RAND() LIMIT 1; 당신이 무작위로 당신이 받기 원하는 행의 수를 제한하는 한계에서 그 결과를 정렬하기 위해 MySQL을 묻는 당신의 SQL 쿼리에 RAND() BY 주문을 추가함으로써

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>'; 
?> 

.

예제 코드는 단일 행을 선택하여 작성되었습니다. 더 많은 것을 원한다면 5, while 루프를 추가해야합니다.

+0

안녕하세요. 대답 해줘서 고마워. – letris