gpt4 book ai didi

php - MYSQL 和 PHP : SELECT subquery without result returns array key with empty value

转载 作者:行者123 更新时间:2023-11-29 07:26:20 25 4
gpt4 key购买 nike

我有一个包含游戏、文章(评论+预览)和视频(视频评论+视频预览)的数据库。我有一款 ID 为 233 的游戏,我想查找一篇评论、一篇预览、一篇视频评论和视频预览(如果存在)。

为此,我使用以下查询:

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”的键/值对,但其值为空。但是,我希望这个键/值对完全不存在,因此我可以简单地循环数组并将每个键/值对打印为链接。

有人知道解决这个问题的有效方法吗?非常感谢任何帮助!

最佳答案

不幸的是,这似乎是一项任务,您无法使用单独的查询来逃脱。但是,我会使用 union 来组合查询的结果,而不是连接、选择列表中的子查询或单独的查询。

  1. 使用 union 时,客户端和数据库之间只有 1 次往返
  2. 如果联合中的查询不返回任何行,则它将不会出现在结果集中(请参阅OP中的要求)。请注意,type 字段的值将告诉您返回的 url 的类型。

示例代码:

SELECT article_url, 'review' as type
FROM articles
WHERE articles_game_id = 233
AND artikel_sort = 'review'
AND article_online = 1
ORDER BY article_datetime DESC
LIMIT 1
UNION ALL
SELECT article_url, 'preview'
FROM articles
WHERE articles_game_id = 233
AND artikel_sort = 'preview'
AND article_online = 1
ORDER BY article_datetime DESC
LIMIT 1
UNION ALL
SELECT trailer_url, 'video review'
FROM trailers
WHERE trailer_game_id = 233
AND trailer_sort = 'video review'
AND trailer_online = 1
ORDER BY trailer_datetime DESC
LIMIT 1
UNION ALL
SELECT trailer_url, 'video preview'
FROM trailers
WHERE trailer_game_id = 233
AND trailer_sort = 'video preview'
AND trailer_online = 1
ORDER BY trailer_datetime DESC
LIMIT 1

另一种解决方案可能是使用子查询来获取最大日期(或 id,如果文章/预告片 id 是 auto_increment 字段)。但是,您将需要 2 个子查询(1 个或文章、1 个预告片),然后是 2 个查询,其中子查询连接回文章/预告片表,第 5 个顶部将它们组合成 1 个查询,所以我不会描述这种方法.

关于php - MYSQL 和 PHP : SELECT subquery without result returns array key with empty value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34394083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com