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事实并非如此-您应该在数据库、表和列名(甚至别名)周围使用反勾号。您看到的错误很可能是引用别名而不是实际列名的结果。