sql查询顺序似乎不起作用

时间:2011-12-08 21:17:24

标签: php sql pdo sql-order-by

我有这个表结构,

| 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   |

我想将获取结果命令为level,因此我执行此查询:

$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排序。我很困惑为什么。

我的数据库详情:

id - PRIMARY, AUTO INCREMENT
name - UNIQUE
INNODB

3 个答案:

答案 0 :(得分:2)

您的查询订单正确。

这是无关紧要的,因为它每次调用它时只返回一行。

您的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 :(得分:1)

您的WHERE子句正在寻找您已识别为主键的ID,因此您的查询应仅返回一行。

答案 2 :(得分:0)

你做不到。您可以使用占位符或绑定参数。