2013-08-20 75 views
0

新手在这里。所以我提前道歉,如果它是如此简单地解决我的问题,但我找不到任何解决方案。我有两个表MESSAGESUSERSMYSQL查询从一个表中选择并与其他表加入结果

MESSAGES

|id|user_id|message|1st number|2nd number| 

USERS

|user_id|name| 

我想显示一条消息,并通过USER_ID得到的邮件旁边的用户名。只有一个查询可以做到吗?

在这一刻我的演示查询看起来像那样,但它不起作用。

SELECT * 
FROM messages 
WHERE 1st number BETWEEN $x AND $z 
AND 2nd BETWEEN $x AND $z 
LEFT JOIN users 
ON users.user_id= messages.user_id 
ORDER BY time DESC 

我得到的错误:您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以便在第5行'LEFT JOIN用户ON WHERE users.user_id = messages.user_id ORDER BY time DESC'时使用正确的语法。

+1

你已经在你的问题中说过了;你可以加入他们。 http://dev.mysql.com/doc/refman/5.0/en/join.html –

+0

你会得到什么错误信息?另外,下面的工作是? “SELECT * FROM messages LEFT JOIN users on users.user_id = messages.user_id” 如果不是,那么后一个查询得到的错误消息是什么? – Taemyr

+3

'第一个号码'是这个你真实的域名..? –

回答

0

您的SQL有几个问题:

  • 如果列名称包含空格,你需要引用他们
  • 你需要写在MySQL完整的列名
  • JOIN到来之前WHERE

因此,像

SELECT * 
FROM messages 
LEFT JOIN users ON users.user_id=messages.user_id 
WHERE `1st number` BETWEEN $x AND $z 
AND `2nd number` BETWEEN $x AND $z 
ORDER BY time DESC 

应该工作

+0

谢谢,这个解决了。只是一个新手问题。所以当试图从多个表中获得结果时,首先你需要加入所有这些结果,然后过滤? – user2699508

+0

SQL select通过定义“查询视图” - 一个或多个表,子查询或数据库视图连接在一起,然后过滤,分组,组过滤它。所以你有'SELECT' ...字段列表...'FROM' ...使用连接和子查询的视图定义...'WHERE' ...行过滤器...'GROUP BY' ...分组参数。 ..'HAVING' ...组过滤器...'ORDER BY'排序参数。当然这其中有些是可选的。 –

+0

再次感谢makin清楚! – user2699508

0

请试试这个。

SELECT 
    * 
FROM 
    messages 
    LEFT JOIN users ON users.user_id = messages.user_id 
WHERE 
     `1st number` BETWEEN $x AND $z 
    AND 
     `2nd number` BETWEEN $x AND $z 
ORDER BY time DESC 
相关问题