PHP / MySQL: я думаю, что мне нужно использовать JOIN здесь, но я не знаю, как - PullRequest
1 голос
/ 16 мая 2011

Это мой запрос:

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 не работает с ключевыми словами AS, которые я использую. В результате мой запрос возвращает больше результатов, чем мне нужно. Я думаю, что я должен использовать JOIN здесь, но я не могу понять их. Пожалуйста, помогите!

:) Спасибо

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Это правда, вы должны использовать JOIN вместо FROM table1, синтаксис table2 .

Чтобы ответить на ваш вопрос более прямо: предложение WHERE работает со столбцами в таблицах, предложение HAVING работает с вашим набором результатов (который включает ваши псевдонимы).

Как ваши таблицы связаны друг с другом? Это вопрос, на который вам нужно ответить в первую очередь - получив такой ответ, вы в значительной степени помещаете его непосредственно в предложение ON в 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, 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

Чтобы получить лучшее представление о том, как JOIN связывают таблицы, вы можете проверить эту удобную страницу , на которой JOINs представлены в виде диаграмм Венна .

0 голосов
/ 16 мая 2011
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 = users.id
JOIN 
  projects ON projects.id=messages.project_id
WHERE 
  `m_pid` = '$project_id'
ORDER BY 
  `m_dc` DESC
0 голосов
/ 16 мая 2011

Попробуйте это?

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 ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...