【问题标题】:sql query order by seems not workingsql查询顺序似乎不起作用
【发布时间】:2011-12-08 21:17:24
【问题描述】:

我有这个表结构,

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

我的数据库详细信息:

id - PRIMARY, AUTO INCREMENT
name - UNIQUE
INNODB

【问题讨论】:

  • 我希望结果中只有一行...
  • @AlbinSunnanbo:根据documentation,这根本不起作用(除非数组只包含一个元素)...
  • 我也希望有一行,如果只有一行id 匹配$id,那么排序将如何影响它呢?您是否多次调用它并将多次调用的顺序视为结果的顺序?
  • @Jon Hanna,我将该查询放在了 foreach 中。
  • 这就解释了。在下面回答。

标签: php sql pdo sql-order-by


【解决方案1】:

您的查询排序正确。

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

您的 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),调用一次,然后循环查看结果。

【讨论】:

    【解决方案2】:

    您的 WHERE 子句正在寻找您已确定为主键的 id,因此您的查询应该只返回一行。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 2021-06-24
        • 1970-01-01
        相关资源
        最近更新 更多