LEFT JOIN teams ON teams.id = (SELECT team_id FROM auth_users WHERE id = offers.user_id)
Gives me all the columns of the teams table, but converts everything to NULL.
LEFT JOIN teams ON teams.id = 1
works like a charm
When i do
SELECT (SELECT team_id FROM auth_users WHERE id = offers.user_id) as team_id
team_id will be 1.
For some strange reason it does not work inside the JOIN.
Full Query:
SELECT projects.id, projects.title as title, winner_id, projects.user_id as user_id, until, pages, types.title as type, types.id as type_id, projects.id as id, offers.price as price, offers.delivery_date as delivery_date, teams.*,
(SELECT COUNT(id) FROM comments WHERE comments.project_id = projects.id AND comments.private = 1) as comments,
(SELECT COUNT(id) FROM uploads WHERE uploads.project_id = projects.id) as files,
(SELECT country FROM auth_users WHERE auth_users.id = offers.user_id) as baser_country,
(SELECT business FROM auth_users WHERE auth_users.id = offers.user_id) as baser_business,
(SELECT CONCAT(firstname, ' ', lastname) FROM auth_users WHERE auth_users.id = offers.user_id) as baser_name,
(SELECT team_id FROM auth_users WHERE id = offers.user_id) as team_id,
(SELECT country FROM auth_users WHERE auth_users.id = projects.user_id) as customer_country,
(SELECT business FROM auth_users WHERE auth_users.id = projects.user_id) as customer_business
FROM projects
JOIN types ON projects.type_id = types.id
LEFT JOIN offers ON projects.id = offers.project_id
LEFT JOIN teams ON teams.id = (SELECT team_id FROM auth_users WHERE id = offers.user_id)
WHERE projects.user_id = 1 AND winner_id != 0 AND uploaded = 1
GROUP BY projects.id
ORDER BY projects.id DESC
LIMIT 3
Thanks in advance!
First you should get rid of all these sub-queries. With the correct join, none of them is really necessary. They make the query very crowded, and they do not contribute to query performance.
To my best understanding your query should look something like this.
Next you should never write a grouped query with fields in the output that are neither grouped nor aggregated. I’ve used the
MIN()aggregate function on all the rogue ungrouped fields of your query.I recommend the use of short table aliases and I recommend using the table aliases everywhere: As a third party reader I’m completely lost when it comes to the question which table “
winner_id” comes from, for example.