2010-10-27 67 views
2

我将如何去从一个MySQL表(朋友)中选择并按另一个表(用户)中的字段排序结果?从一个mysql表(朋友)中选择并按另一个表(用户)中的字段排序结果?

表是设置如下:

CREATE TABLE `users` (
    `id` int(12) NOT NULL auto_increment, 
    `first_name` varchar(100) NOT NULL default '', 
    `last_name` varchar(255) NOT NULL default '', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

CREATE TABLE `friends` (
    `id` int(12) NOT NULL auto_increment, 
    `user_id` int(2), 
    `mutual` int(2) NOT NULL default '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

基本上是我需要做的是拉从朋友表user_ids,他们相匹配的用户表,并得到了用户的数据,然后命令输出通过以下方式:

concat(users.first_name, users.last_name) ASC, friends.mutual DESC 

回答

2

您将使用JOIN来实现此目的。

SELECT * 
    FROM friends 
    JOIN users ON friends.user_id = users.id 
    ORDER BY concat(users.first_name, users.last_name) ASC, friends.mutual DESC 
+0

嗨Chetan,我认为是这种情况,但唉,这是我的弱点之一,你能否提供更多的细节来指导我的特殊情况? – 2010-10-27 04:04:20

+0

@Jaime:我还在编辑我的答案:) – Chetan 2010-10-27 04:05:23

+1

@Jaime:顺便说一下,问题不清楚您是要从users表中选择数据并按朋友表排序,还是从朋友表和用户表排序。我的答案是关于后者。如果你想要前者,就让它成为'SELECT * FROM users JOIN friends ...' – Chetan 2010-10-27 04:11:07

0

选择users.first_name,users.last_name,friends.mutual 从用户,朋友 其中users.id = friends.id AND friends.mutual!= 0;

可以工作,或者您可能需要调整它。我没有ENV给你准确的查询:)

快乐Mysqling :)

--Cheers

+0

封锁你的代码,然后按ctrl + K – klox 2010-10-27 04:09:06

+0

缺少ORDER BY – 2010-10-27 04:09:38

1

试试这个!我认为它应该工作!

SELECT 
friends.user_id, users.* 
FROM 
friends, users 
WHERE 
    friends.user_id = users.id 
ORDER BY 
    concat(users.first_name, users.last_name) ASC, friends.mutual DESC 
+0

有效,但ANSI-89语法:/ – 2010-10-27 04:08:43

+0

我会后悔的,但骄傲在秋天之前:你用ANSI-89语法表达什么?我没有加入JOIN? – 2010-10-27 04:12:02

0

我相信你想要的东西,如:

SELECT * FROM users 
INNER JOIN friends ON users.id=friends.user_id 
ORDER BY CONCAT(users.first_name, users.last_name) ASC, friends.mutual DESC 

我希望这有助于!

0

使用

select concat(users.first_name,users.last_name) as name,friends.mutual as friends from users 
right join friends on friends.users_id = users.id order by name asc, friends desc 

这应该做的工作。

相关问题