[英]SQL - Ordering table with subquery for select
我正在尝试使用子查询对来自uuid
的name
进行查询排序。 让我们在 MySQL 中有这两个表:
禁令:
ID | uuid | 时间 | 原因 |
---|---|---|---|
1 | c6b8eade-7db9-345b-b838-8f8361552cf5 | 1642369382 | 测试 |
2 | 0138c279-c5fa-3acd-adaa-8edb7b4569d8 | 1642384565 | 垃圾邮件 |
3 | 3c01262c-a3c3-3133-ba43-92a9ded01c27 | 1631876477 | 哈克斯 |
用户:
ID | uuid | 姓名 |
---|---|---|
45 | c6b8eade-7db9-345b-b838-8f8361552cf5 | 约翰 |
100 | 0138c279-c5fa-3acd-adaa-8edb7b4569d8 | 麦克风 |
35 | 3c01262c-a3c3-3133-ba43-92a9ded01c27 | 诺曼 |
通过这个查询,我可以 select 整个ban
记录 + 从users
表中获取用户name
:
SELECT
bans.*,
(SELECT users.name FROM users WHERE users.uuid = bans.uuid) as name
FROM bans
ORDER BY :column;
但我不能按name
订购。 如何更改此查询,以便我可以按users.name
进行排序? 我试图将我的 SQL select 包装到另一个 select 中,但它不起作用,我无法解决它:D
如果我见过一个,那就是一个 JOIN 查询。
您不能在 PDO 或 MYSQLI 中将表或列名称作为参数传递。 数据库无法编译和优化其中包含未知列或表的代码
SELECT b.*, u.name
FROM bans b
LEFT JOIN users u ON u.uuid = b.uuid
ORDER BY u.name;
也许你可以试试这个
select a.id, a.uuid, a.time, a.reason, b.name from bans a
left join users b
on a.id = b.id
order by b.name;
您不能使用参数化标识符(数据库/表/列/等)名称。 您的数据库库很可能会改变这一点:
SELECT * FROM t ORDER BY :column
进入这个:
SELECT * FROM t ORDER BY 'name'
就 MySQL 而言,它是完全有效的 SQL , 但它不会产生预期的结果,因为它是按常数排序的。 您需要明确指定列名:
ORDER BY name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.