Php SQL:如何在SQL中筛选(在何处)联接(在)表?

Php SQL:如何在SQL中筛选(在何处)联接(在)表?,php,mysql,sql,Php,Mysql,Sql,我有两个表(用户和帖子),我想由一个用户写出所有帖子(以及其他内容)。我想我应该使用JOIN和WHERE,但是使用WHERE会出错 这是我的代码: SELECT username, post, joinDate, title, info FROM users WHERE userId='18' JOIN posts ON users.userId=posts.userId ORDER BY date DESC 我是新手,也许有更好的方法,但我想不出来。 感谢所有的

我有两个表(用户和帖子),我想由一个用户写出所有帖子(以及其他内容)。我想我应该使用JOIN和WHERE,但是使用WHERE会出错

这是我的代码:

SELECT username, post, joinDate, title, info FROM users 
    WHERE userId='18' 
    JOIN posts ON users.userId=posts.userId 
    ORDER BY date DESC
我是新手,也许有更好的方法,但我想不出来。
感谢所有的答案

JOIN子句位于WHERE子句之前,FROM子句之后。首先将所有需要的表连接在一起,然后使用WHERE进行过滤。像这样:

SELECT username, post, joinDate, title, info
FROM users 
JOIN posts ON users.userId=posts.userId 
WHERE users.userId='18'
ORDER BY date DESC
试试下面这样

    SELECT u.*,p.*
    FROM users u JOIN posts p ON u.userId=p.userId
    WHERE u.userId=18      
    ORDER BY date DESC
其中
将位于
join
之后,18是int数据类型值,因此不需要对其使用单引号,并使用别名避免不明确的列名

SELECT username, post, joinDate, title, info
FROM users 
JOIN posts ON users.userId=posts.userId and users.userId='18'
ORDER BY date DESC
如果
userId
users
表中,则可以使用
where userId='18'


如果
userId
posts
表中,那么它应该是
userId='18'
在join部分。

WHERE
必须在
join
move
WHERE userId='18'
在join语句之后,在order byI get之前,“#1052-WHERE子句中的'userId'列不明确”当我这样做时,造成这种情况的原因可能是什么?您可以尝试使用(userId)连接帖子。您需要在WHERE子句中包含在已连接到一起的多个表中的任何列名之前指定表别名。WHERE users.userID='18'更改为
WHERE users.userID='18'
,以避免歧义`成功了!非常感谢。为什么?选择*总是一个坏主意,不要推荐它。为什么你认为单字母的别名会有帮助?@Dharman我使用的表别名与*选择不同,所以你认为表别名。*和*是一样的?@Dharman所以在否决投票之前,你必须澄清你的想法。我得2分。首先,您应该避免总是选择*。二是不需要单字母别名,也没有任何帮助;这使得阅读变得更加困难。@Dharman在这里提供了与sql相关的每个问题的答案,因此用户在查询时总是使用单字别名,你知道为什么吗?因为这里大多数人都提交了他们现实生活问题的子集或样本,所以必须告知OP解决这个问题所需的信息。不完全希望你明白我的意思。你没有抓住要点,你的回答会给OP这样的初学者带来更多的困惑。