I got this MySQL
query, I need to join both tables apps
and contacts
, but I am getting this error:
MySQL said: Documentation
#1054 - Unknown column 'messages.app_id' in 'on clause'
My query:
SELECT
`messages`.*,
(
SELECT
COUNT(*)
FROM
messages AS message
WHERE
message.app_id = `messages`.`app_id`
AND message.contact_id = `messages`.`contact_id`
AND message.status = "sent"
) AS `unread_count`
FROM
`messages`,
(
SELECT
`contact_id`,
max(`created_at`) as latest_created_at
FROM
`messages`
GROUP BY
`contact_id`, `app_id`
) AS `max_created_at`
INNER JOIN `apps` AS `apps` ON `messages.app_id` = `apps`.`id`
INNER JOIN `contacts` AS `contacts` ON `messages.contact_id` = `contacts`.`id`
WHERE
`messages`.`app_id` = 1
AND `messages`.`contact_id` = max_created_at.`contact_id`
AND `messages`.`created_at` = max_created_at.latest_created_at
what exactly is wrong here?
2
Answers
I think you are simply missing a backtick with the table name –
Don’t use old school comma separated table lists, especially not mixed with more "modern" join syntax. You also skipped
app_id
in your select list and join formax_created_at
. The correlated subquery forunread_count
is unnecessary as you can add it tomax_created_at
subquery: