[英]SQL Order By Column From another Table
$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username'";
這段代碼運行良好,但我想做的是按用戶表中的一列(user_id 列)對其進行排序。 現在我不能這樣做……
$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username' ORDER BY user_id";
因為在我的訂閱表中沒有名為 user_id 的列,只有在我的用戶表中。
我不明白為什么你有兩個user
欄,也許這是一個錯字。 但是您需要JOIN表。 在這種情況下,我使用了LEFT OUTER JOIN
,它只會返回來自subscriptions
記錄以及與來自users
的JOIN
條件匹配的記錄。 即user2 = user_id
。
SELECT subscriptions.user2
FROM subscriptions
LEFT JOIN users ON subscriptions.user2 = users.username
WHERE subscriptions.user1 = '$username'
ORDER BY users.user_id
您可以在 ORDER BY 子句中選擇 user_id:
SELECT user2
FROM subscriptions
WHERE user1 = '$username'
ORDER BY (select user_id from users where users.username = subscriptions.user2);
我推測 users.username 是唯一的,因此您的用戶表中有兩個自然唯一的鍵(user_id 和 username)。 您已決定將用戶名用於其他表中的引用。 沒關系。
但是,如果 users.username 不是唯一的,那么您的數據庫設計就被破壞了,當然您應該使用 user_id 作為其他表中的引用而不是用戶名。
您應該使用JOIN
語法,然后您可以從users
表中按user_id
進行排序。
如果您有一對一的數據關系,請使用常規連接(而不是 LEFT JOIN)。
SELECT a.user2 FROM subscriptions a, user b
WHERE a.user2 = b.username
AND a.usera.user1 = '$username' ORDER BY b.user_id
如果不查看表的方案,很難給出有效的解決方案。 但是從查詢來看,如果您使用 '$username' 來搜索訂閱而不是用戶表,那么您的 dab 設計似乎很差。
有了一個好的數據庫設計,你的查詢應該是這樣的:
SELECT a.fiel1, a.field2, a.user_id, b.field1, b.field2, b.user_id
FROM subscriptions a, user b
WHERE a.user_id = b.user_id
AND b.username = '$username' ORDER BY b.user_id
你應該order by user_id desc
使用order by user_id desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.