2013-08-02 3 views
0

Я использую mysqli_fetch_assoc для ввода данных в массив строк.Возвращает ли mysqli_fetch_assoc данные?

$res = mysqli_query($link, $query); 
$rows = array(); 
while($r = mysqli_fetch_assoc($res)) { 
$rows[] = $r; 
echo "<br>location:".$r["assigned"]."||".$r["amount"]."<br>"; 
} 

Порядок, который я вижу в этом файле php, и порядок, наблюдаемый при выполнении запроса в командной строке mysql, различны. Последняя и вторая последняя строка обмениваются на php.

В запросе mysql я использую предложение order by timestamp.

Я искал mysql_fetch_assoc, но не нашел подобных проблем, испытываемых кем-либо еще.

+2

Порядка данных, возвращаемый PHP является тот же порядок, что дается ему в базе данных. – Spudley

+2

Является ли 'timestamp' столбцом в вашей таблице? Возможно, у вас есть две строки с одинаковой «меткой времени». В этом случае вы можете упорядочить строки по-разному. –

+1

Если вы хотите заказать, изучите использование предложения ORDER BY в SQL. – christopher

ответ

3

Порядок данных, возвращаемых PHP, - это порядок, возвращаемый им mySQL.

Если метки времени идентичны, и это единственное поле ORDER BY, то да, вполне возможно, что mySQL может давать разные заказы из одного и того же запроса.

Почему он не предоставил их в разных заказах между одинаковыми запросами, неизвестно; возможно, артефакт от кеширования или что-то в этом роде? Но конечная точка заключается в том, что если нет порядка сортировки, который отличает записи, тогда база данных может предоставлять их в любом порядке, который ему нравится.

Если вы действительно хотите, чтобы они всегда приходили в том же порядке, даже если есть дубликаты, простой ответ заключается в том, чтобы добавить ваше поле первичного ключа в конец предложения ORDER BY. (Вы сделать имеют уникальное поле первичного ключа, не так ли? право ??)

+0

Может ли быть какая-то настройка в php.ini или apache? У меня есть первичный ключ, но это требование не гарантирует. Выяснилось, добавив другое поле. –

+0

@NaveenSharma - достаточно справедливо. Я предлагал первичную область в качестве крайней меры, чтобы заставить ее всегда быть в одном порядке. Если у вас есть другое поле, которое выполняет эту работу, все в порядке. – Spudley

2

Порядок, в соответствии с которым данные возвращаются undefined по умолчанию. Никто не дает никаких гарантий относительно порядка возвращаемых данных. Если вам нужен конкретный заказ, используйте предложение ORDER BY. Это не относится к какому-либо конкретному способу получения данных.

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