[英]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.