SQL从另一个表中按列排序

时间:2015-04-13 09:33:29

标签: php mysql sql database

$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username'";

这段代码完美无缺,但我想做的是从我的用户表中删除一行列,即user_id列。现在我无法做到这一点......

$sql = "SELECT user2 FROM subscriptions WHERE user1 = '$username' ORDER BY user_id";

因为我的订阅表中没有名为user_id的列,所以只在我的users表中。

5 个答案:

答案 0 :(得分:1)

您需要JOIN表格。

SELECT subscriptions.user2 
FROM subscriptions 
LEFT JOIN users ON subscriptions.user2 = users.user_id
WHERE subscriptions.user1 = '$username' ORDER BY users.user_id

答案 1 :(得分:0)

您应该使用JOIN syntax,然后可以从user_id表格users订购。

答案 2 :(得分:0)

您可以在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是唯一的,因此您的users表中有两个自然唯一键(user_id和username)。您已决定在其他表中使用用户名作为参考。没关系。

但是,如果users.username不是唯一的,那么您的数据库设计就会被破坏,当然,您应该使用user_id作为其他表中的引用而不是用户名。

答案 3 :(得分:0)

如果您有一对一的数据关系,请使用常规连接(不是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'搜索订阅而不是用户表。

使用良好的数据库设计,您的查询应如下所示:

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

答案 4 :(得分:-2)

你应该使用order by user_id desc