Php SQL:如何在SQL中筛选(在何处)联接(在)表?
我有两个表(用户和帖子),我想由一个用户写出所有帖子(以及其他内容)。我想我应该使用JOIN和WHERE,但是使用WHERE会出错 这是我的代码: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 我是新手,也许有更好的方法,但我想不出来。 感谢所有的
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
moveWHERE 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这样的初学者带来更多的困惑。