Reputation: 379
If I remove ORDER BY c.campaign_id ASC
from below statement it work fine but now it throw me Sub query return more than 1 row
.
SELECT SQL_CALC_FOUND_ROWS c.campaign_id,
c.title as campaign_title,
IFNULL((SELECT meta_value
FROM campaign_meta as cm
WHERE cm.campaign_id = c.campaign_id
AND cm.meta_key = 'total_viewed'), 0) AS total_viewed,
c.campaign_identifier,
c.added_datetime,
l.label_id,
l.title AS label_title,
l.color,
u.username
FROM campaigns AS c
LEFT JOIN users AS u ON u.user_id = c.author
LEFT JOIN campaign_relation AS cr ON c.campaign_id = cr.campaign_id
LEFT JOIN labels AS l ON l.label_id = cr.label_id
ORDER BY c.campaign_id ASC
LIMIT 0, 10
Upvotes: 0
Views: 54
Reputation: 9143
your sub query returns more that one row as result
(SELECT meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND
cm.meta_key = 'total_viewed')
Where we need to change your query to use sytax:
SELECT ... LIMIT 1
Update it for MySQL
(SELECT meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND
cm.meta_key = 'total_viewed' LIMIT 1)
or rewrite the query
out of interest to MS SQL syntax
(SELECT TOP 1 meta_value FROM campaign_meta as cm WHERE cm.campaign_id = c.campaign_id AND
cm.meta_key = 'total_viewed')
Upvotes: 2