порядок запросов sql по кажется не работает - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть эта структура таблицы,

| id | name | level |
---------------------
| 1  |  a   |   1   |
| 2  |  b   |   2   |
| 3  |  c   |   3   |
| 5  |  d   |   4   |
| 6  |  e   |   1   |
| 7  |  f   |   2   |
| 8  |  g   |   1   |
| 9  |  g   |   4   |

Я хочу упорядочить результат выборки до уровня, поэтому я выполняю этот запрос:

$sql = "SELECT * FROM section_tb WHERE id = ? ORDER BY level";
$stmt = $db->prepare($sql);
$stmt->execute(array($id));
$result = $stmt->fetch(PDO::FETCH_ASSOC);

Однако, когда я print_r($result),Похоже, что порядок был отсортирован по идентификатору.Я запутался, почему.

Мои данные о БД:

id - PRIMARY, AUTO INCREMENT
name - UNIQUE
INNODB

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Ваш запрос правильно оформлен.

Это не имеет значения, так как в любом случае он возвращает только одну строку при каждом вызове.

Ваш foreach вызывает его несколько раз, и порядок влияет только на фактический вызов базы данных. Следовательно, общий порядок результатов - это порядок каждого foreach.

Если бы foreach передал параметр, который идентифицировал более одной строки, то в каждом из этих вызовов порядок был бы по уровню (например, если вы выполняли запросы на совпадение по имени, то два, которые соответствуют «g») будет в указанном порядке).

Вы хотите изменить запрос на что-то вроде SELECT * FROM section_tb WHERE id in (1,2,3,4,5,6,7,8,9) ORDER BY level (или, возможно, просто SELECT * FROM section_tb ORDER BY level), вызвать его один раз и просмотреть результаты.

1 голос
/ 09 декабря 2011

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

0 голосов
/ 09 декабря 2011

Вы не можете этого сделать. Вы можете использовать заполнитель или связать параметр.

...