2015-09-11 89 views
0

我有以下JOIN我正在尝试创建。SQL JOIN失败的问题

SELECT rating_draft_result.COUNT(id), rating_draft_result.user_id, rating_draft_result.result 
FROM rating_draft_result 
INNER JOIN users ON 
rating_draft_result.user_id, rating_draft_result.result = users.id 

我想COUNT的rating_draft_result表的总id的,然后也SELECT user_ID的,并从该表中的结果。然后我试图将user_id和rating_draft_result表中的结果匹配到用户的id列。然后我想从id匹配的用户表中获取用户名,但是我无法确定该部分,并且无论如何使用下面的代码都会收到错误。

我碰到下面的错误..

调查SELECT总数准备()失败:您的 SQL语法错误;检查对应于你的MySQL服务器版本 在第4行

我的数据库表像这样用接近“.ID”正确的语法是什么我手动...

users 
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`firstname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
`lastname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
`phone_number` varchar(15) COLLATE utf8_unicode_ci NOT NULL, 
`username` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
`password` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
`salt` varchar(32) COLLATE utf8_unicode_ci NOT NULL, 
`joined` datetime NOT NULL, 
`group` int(11) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

rating_draft_result 
CREATE TABLE `rating_draft_result` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`result` int(11) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

在我的查询中做错了吗?

所需的输出:

用户 CREATE TABLE usersid``firstname``lastname``email``phone_number``username``password``salt``joinedgroup

1 Jack Johnson [email protected] 2222 jackusername ffd fdddfd today 1 
10 Tom Thompson [email protected] 5555 Tomusername 


rating_draft_result 
    `id` `user_id` `result` 
     20 1   10 

我希望能够匹配rating_draft_result的user_idresult与用户表的id字段

。所以我想获取jackusername和tomusername字段。

+1

@everyone你怎么知道他不希望将'result'列作为连接条件的一部分? –

+0

@TimBiegeleisen我也想加入。 – Ralph

+1

你能告诉我们一个你想从查询中得到的样本输出吗? –

回答

2

检查JOIN条件

SELECT rating_draft_result.user_id, rating_draft_result.result, COUNT(*) 
FROM rating_draft_result 
INNER JOIN users 
    ON rating_draft_result.user_id = users.id 
GROUP BY rating_draft_result.user_id, rating_draft_result.result; 

你有

ON rating_draft_result.user_id,rating_draft_result.result = users.id

+1

@Ralph试用群 – lad2025

+0

我不想统计总记录。只有来自rating_draft_result表的ID。我没有得到一个错误,但计数显示100时,它需要两个 – Ralph

+1

@Ralph首先学习如何提出问题。我看不到你的数据,所以Tim Biegeleisen说:“所有答案都是猜测性的” – lad2025

1

的问题是在你的JOIN ON条款。你需要改变它像

INNER JOIN users ON 
rating_draft_result.user_id = users.id 

(OR)如果你想有两个条件,然后用AND运营商像

FROM rating_draft_result 
INNER JOIN users ON 
rating_draft_result.user_id = users.id 
AND rating_draft_result.result = users.id 

改变你的整个查询要像下面

SELECT COUNT(rating_draft_result.id), 
rating_draft_result.user_id, 
rating_draft_result.result 
FROM rating_draft_result 
INNER JOIN users ON 
rating_draft_result.user_id = users.id 
AND rating_draft_result.result = users.id; 
+0

我不能有多个rating_draft_result子句?我怎样才能同时拥有user_id和result ='users.id'? – Ralph

+0

@Ralph,使用AND/OR条件。如果有帮助,请参阅编辑答案。 – Rahul

+0

我现在得到这个,当我改变它......调查SELECT总数prepare()失败:FUNCTION rating_draft_result.COUNT不存在。检查“参考手册”中的“函数名称分析和解析”部分。我如何使“COUNT”工作正如我试图获得的那样工作。 – Ralph