2010-10-27 61 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 

這應該做的工作。

相關問題