我想要多张照片
和多个视频
,主要问题是如果我不这样做,我无法内联
'使用联接。
例如,我得到了 2 张照片
一个 video
和一个 photo
。
我有一个父表 news
和 2 个辅助表 news_photos
和 news_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}
");
关于结构的图像:
最佳答案
其中实际上只有一个 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/