PHP/MySQL:我想我需要在这里使用连接,但我不';我不知道怎么做
这是我的疑问:PHP/MySQL:我想我需要在这里使用连接,但我不';我不知道怎么做,php,mysql,join,Php,Mysql,Join,这是我的疑问: SELECT messages.id AS m_id, messages.user_id AS m_uid, messages.project_id AS m_pid, messages.date_created AS m_dc, messages.type AS m_type, messages.file_url AS m_fu, messages.message_text AS m_text, messages.deleted AS m_del,
SELECT messages.id AS m_id, messages.user_id AS m_uid, messages.project_id AS m_pid, messages.date_created AS m_dc, messages.type AS m_type, messages.file_url AS m_fu, messages.message_text AS m_text, messages.deleted AS m_del,
projects.id AS p_id, projects.name AS p_name, projects.company_id AS p_cid,
users.id AS u_id, users.name AS u_name
FROM messages, projects, users
HAVING `m_pid` = '$project_id' AND m_uid = u_id
ORDER BY `m_dc` DESC
我一直在使用HAVING而不是WHERE,因为WHERE似乎不适合作为我使用的关键字。结果是我的查询返回的结果比我需要的多。我想我应该在这里使用连接,但我不能真正掌握它们。请帮忙
:)谢谢试试这个
SELECT m.id AS m_id,
m.user_id AS m_uid,
m.project_id AS m_pid,
m.date_created AS m_dc,
m.type AS m_type,
m.file_url AS m_fu,
m.message_text AS m_text,
m.deleted AS m_del,
p.id AS p_id,
p.name AS p_name,
p.company_id AS p_cid,
u.id AS u_id,
u.name AS u_name
FROM messages as m
INNER JOIN projects as p on p.id = m.project_id
INNER JOIN users as u ON u.id = m.user_id
WHERE m.project_id = '$project_id'
ORDER BY ....
试试这个
SELECT m.id AS m_id,
m.user_id AS m_uid,
m.project_id AS m_pid,
m.date_created AS m_dc,
m.type AS m_type,
m.file_url AS m_fu,
m.message_text AS m_text,
m.deleted AS m_del,
p.id AS p_id,
p.name AS p_name,
p.company_id AS p_cid,
u.id AS u_id,
u.name AS u_name
FROM messages as m
INNER JOIN projects as p on p.id = m.project_id
INNER JOIN users as u ON u.id = m.user_id
WHERE m.project_id = '$project_id'
ORDER BY ....
是真的
更直接地回答您的问题:WHERE子句操作表中的列,HAVING子句操作结果集(包括别名)
您的表之间的关系如何?这是您首先需要回答的问题-一旦您得到了答案,您就可以将其直接放入JOIN的ON子句中
SELECT messages.id AS m_id, messages.user_id AS m_uid, messages.project_id AS m_pid, messages.date_created AS m_dc, messages.type AS m_type, messages.file_url AS m_fu, messages.message_text AS m_text, messages.deleted AS m_del, projects.id AS p_id, projects.name AS p_name, projects.company_id AS p_cid,
users.id AS u_id, users.name AS u_name
FROM messages
JOIN users ON messages.user_id = user.id
JOIN projects ON projects.user_id = user.id # this is just a guess
WHERE messages.id = $project_id
ORDER BY `m_dc` DESC
为了更好地了解联接是如何将表关联在一起的,您可能想方便地查看这篇文章。的确如此
更直接地回答您的问题:WHERE子句操作表中的列,HAVING子句操作结果集(包括别名)
您的表之间的关系如何?这是您首先需要回答的问题-一旦您得到了答案,您就可以将其直接放入JOIN的ON子句中
SELECT messages.id AS m_id, messages.user_id AS m_uid, messages.project_id AS m_pid, messages.date_created AS m_dc, messages.type AS m_type, messages.file_url AS m_fu, messages.message_text AS m_text, messages.deleted AS m_del, projects.id AS p_id, projects.name AS p_name, projects.company_id AS p_cid,
users.id AS u_id, users.name AS u_name
FROM messages
JOIN users ON messages.user_id = user.id
JOIN projects ON projects.user_id = user.id # this is just a guess
WHERE messages.id = $project_id
ORDER BY `m_dc` DESC
为了更好地了解联接如何将表关联在一起,你可能想在手边查看一下。你可以使用
WHERE
子句来匹配,比如说消息。p\u id=project.id
你可以进行不可见的连接。你可以使用WHERE
子句来匹配,比如说消息。p\u id=project.id
你可以进行不可见的连接。啊,非常感谢。除了不了解加入情况外,我在阅读了你的帖子后还意识到,我不应该在字段名周围加上勾号。这就是为什么我的WHERE子句开始时出错的原因。@Frank事实并非如此-您应该在数据库、表和列名(甚至别名)周围使用反勾号。您看到的错误很可能是由于引用了别名,而不是实际的列名。啊,非常感谢。除了不了解加入情况外,我在阅读了你的帖子后还意识到,我不应该在字段名周围加上勾号。这就是为什么我的WHERE子句开始时出错的原因。@Frank事实并非如此-您应该在数据库、表和列名(甚至别名)周围使用反勾号。您看到的错误很可能是引用别名而不是实际列名的结果。