我有这个表结构,
| 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
答案 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)
你做不到。您可以使用占位符或绑定参数。