簡體   English   中英

SQL按來自另一個表的列排序

[英]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記錄以及與來自usersJOIN條件匹配的記錄。 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
  • 按 user_id 加入
  • 在用戶表中存儲一次用戶名
  • 在任何其他表中使用 user_id

你應該order by user_id desc使用order by user_id desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM