php - MySQL:新闻的多张照片和视频连接

标签 php mysql database join

我想要多张照片多个视频,主要问题是如果我不这样做,我无法内联 '使用联接。

例如,我得到了 2 张照片 一个 video 和一个 photo

我有一个父表 news 和 2 个辅助表 news_photosnews_videos 我想进入 一个查询 新闻照片视频

这有可能吗?

mysql_query("
    SELECT * 
    FROM news_photos, news_videos 
    FULL JOIN news_videos 
    ON news_id = {$news_id}
    FULL JOIN news_photos
    ON news_id = {$news_id}
");

关于结构的图像: alt text

最佳答案

其中实际上只有一个 FULL JOIN,因为您根本不涉及 news 表。

SELECT *  
FROM news_photos  
FULL JOIN news_videos  
ON news_photos.news_id=news_videos.news_id
WHERE news_photos.news_id=... OR news_videos.news_id=...

MySQL 不支持 FULL JOIN。使用两个 LEFT JOIN 和一个 UNION 可以低效地模拟它,但实际需要这样做的情况相对较少。假设每张照片和视频都属于新闻,您可以通过将 news 表放入其中来避免它并获得更常规的查询:

SELECT *
FROM news
LEFT JOIN news_photos ON news_photos.news_id=news.id
LEFT JOIN news_videos ON news_videos.news_id=news.id
WHERE news_id=...

但是,这几乎肯定不是您的意思!如果一个新闻项目有多个照片和视频,您将有效地创建一个笛卡尔积,其中照片和视频的每个组合都会产生一行。这是您几乎不想要的那种组合爆炸!

如果你只想要每张照片和视频中的一个,我想你可以使用 LEFT JOIN 将其分解为一个查询,它总是在另一侧给出 NULL:

SELECT * FROM news_photos
LEFT JOIN news_videos ON 0
WHERE news_photos.news_id=...
UNION SELECT * FROM news_photos
RIGHT JOIN news_videos ON 0
WHERE news_videos.news_id=...

但是这样做真的没有任何好处。不要强行将两个单独的查询(“我想要新闻的照片,新闻的视频”)合并为一个。只需简单的方法即可:

SELECT * FROM news_photos
WHERE news_id=...

SELECT * FROM news_videos
WHERE news_id=...

关于php - MySQL:新闻的多张照片和视频连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3649889/

相关文章:

mysql - 数据库存储多种类型的数据,但需要全局唯一 ID

MySQL:回滚时间更长?

database - 如何列出 Citrusleaf/AeroSpike 主机的 namespace ?

javascript - json_decode 期望参数 1 是字符串,表示给出了数组。为什么我的字符串不能正常通过?

MySql:存储空单元格,这不好吗?

php - 如何在事件监听器中获取经过身份验证的用户-Laravel

MySQL 选择最新出现的 GROUP BY 字段

mysql - 从具有特定元素的列记录中拆分一条或多条记录

php - 如何使用 PHP 从 mysql 中读取值

php - 如何使用 PHPSpec 和 Laravel 插入示例数据