我有一个游戏,文章(评论+预览)和视频(视频评论+视频预览)的数据库。我有一个ID为233
的游戏,如果这些游戏存在,我想查找一个评论,一个预览,一个视频评论和视频预览。MYSQL和PHP:没有结果的SELECT子查询返回空值数组键
要做到这一点,我使用下面的查询:
SELECT (SELECT article_url
FROM articles
WHERE articles_game_id = 233
AND artikel_sort = 'review'
AND article_online = 1
ORDER BY article_datetime DESC
LIMIT 1) AS review,
(SELECT article_url
FROM articles
WHERE articles_game_id = 233
AND artikel_sort = 'preview'
AND article_online = 1
ORDER BY article_datetime DESC
LIMIT 1) AS preview,
(SELECT trailer_url
FROM trailers
WHERE trailer_game_id = 233
AND trailer_sort = 'video review'
AND trailer_online = 1
ORDER BY trailer_datetime DESC
LIMIT 1) AS videoreview,
(SELECT trailer_url
FROM trailers
WHERE trailer_game_id = 233
AND trailer_sort = 'video preview'
AND trailer_online = 1
ORDER BY trailer_datetime DESC
LIMIT 1) AS videopreview
FROM articles
然而,这个查询有两个问题:
- 它查询数据库的五倍,这似乎不是很有效对我来说。
- 如果没有评论(例如),生成的PHP数组确实有一个键/值对与键'review',但其值为空。但是,我希望此键/值对完全不存在,因此我可以简单地遍历数组并将每个键/值对打印为链接。
有没有人知道解决这个问题的有效方法?任何帮助是极大的赞赏!
由于'ORDER BY trailer_datetime DESC LIMIT 1',左连接将不会生成正确的记录 –
您确定在这里遇到效率问题吗?数据库擅长查询,如果它被称为很多(如果它不是很多,那么它的速度有多快?),通常会在幕后优化这些东西。你有证据证明你的应用程序实际上在这个查询上花了很多时间吗? – DaveyDaveDave