SELECT `a`.`department`, `a`.`category`, `a`.id,
(SELECT group_concat(t_0) FROM images WHERE ad_id=a.id) t_0,
(SELECT group_concat(t_1) FROM images WHERE ad_id=a.id) t_1,
(SELECT group_concat(t_1) FROM images WHERE ad_id=a.id) t_8
FROM `ads` AS `a`
WHERE (a.department = 1) AND (a.category = 12) AND (a.charged=1)
ORDER BY `a`.`id` DESC
有比这更好的解决方案吗? 我需要为每个a.id(ad_id)
提供图像表中的所有图像谢谢:)
...编辑
啊哈,看来这是有效的:
SELECT `a`.`department`, `a`.`category`, `a`.id, group_concat(t_0), group_concat(t_1), group_concat(t_8)
FROM `ads` AS `a`
LEFT JOIN images i ON i.ad_id=a.id
WHERE (a.department = 1) AND (a.category = 12) AND (a.charged=1)
GROUP BY a.id DESC
不知道这是否是正确的解决方案......:)
答案 0 :(得分:2)
我不认为这是一个很好的解决方案,因为您使用group_concat函数,该函数的限制称为group_concat_max_len。因此,您可能无法获得整个结果。即使限制很高,我也不愿意使用group_concat,因为您可能将应用程序移动到另一台服务器,并且设置可能不同。
我只是简单地在简单的查询中划分查询并在PHP中处理它们(如果是这种情况)。过早的优化并不好。
答案 1 :(得分:0)
你的第二种方法看起来并不那么糟糕,但这取决于表的大小和成功连接的数量...... 如果你有很多想象,这可能会更快地执行,但是你只有图像,并且必须在第二次运行时将它们链接到其他信息:
select t_0,t_1,t_8,ad_id from images where ad_id is in (select id from ads WHERE department = 1 AND category = 12 AND charged=1)
如果我正确理解你的用例,总结一下: 最好先看看哪些广告需要展示,然后在没有任何联接的情况下获取完整广告的图片!