2009-06-12 3 views
0

Я пытаюсь получить случайное число. записей из базы данных с использованиемсохранение столбца в массиве

SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10 

он возвращает столбец базы данных.

Если я хочу сохранить все записи в массиве, то какую функцию php мне нужно использовать для сохранения столбца.

ответ

2

Что-то вдоль линий этого?

$result = mysql_query("SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10"); 
$rows = array(); 
while ($row = mysql_fetch_row($result)) { 
    $rows[] = $row[0]; 
} 

Обновлено, чтобы не использовать переменную $ i, указанную в первом сообщении и комментарии.

+0

Вам не нужен счетчик ($ i) здесь. если вы просто назначаете $ rows [], он автоматически создаст новый «слот» в конце массива. –

1

Посмотрите на примеры того, как запускать запрос и получать набор результатов.

http://www.php.net/mysqli

После того, как у вас есть результат в переменной, сделайте следующее:

$myarray = array(); 
while($row = mysqli_fetch_row($result)) 
    $myarray[] = $row[0]; 
1

С PDO:

$qryStmt = $dbc->query('SELECT QNO FROM TABLE ORDER BY RAND() LIMIT 10'); 
$a = $qryStmt->fetchAll(PDO::FETCH_COLUMN); 
+0

Я думаю, что вы хотите PDO :: FETCH_COLUMN, а не PDO :: FETCH_ASSOC –

+1

Да, это то, что я имел в виду, спасибо. (Изм) – Galen

0

КСТАТИ: Если вы просто хотите, чтобы получить одну строку случайным, это намного быстрее, особ. для больших столов:

выбрать * из таблицы предел 12345,1;

где 12345 - это просто случайное число, вычисленное из count() строк.

see here, что больше подходит для рельсов, но и взглянуть на комментарии.

Но будьте осторожны: в пределе 12345,2 - вторая строка не случайна, а только следующая строка после случайной строки. И будьте осторожны: когда я правильно помню (например, SQLServer), rand() может быть оптимизирован с помощью баз данных, отличных от mysql, что приводит к тому же случайному числу для всех строк, что делает результат не случайным. Это важно, когда ваш код должен быть агностиком базы данных.

0

последний: не смешивайте «случайные» с «трудно предсказать», что не то же самое. Таким образом, порядок в примере «select top 10 ... order by rand()» на SQLServer приводит к двум различным наборам результатов при повторном запуске, НО: если вы посмотрите на 10 записей, они лежат близко друг к другу в db, что означает, что они не являются случайными.

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