早在1月份,我收到了一些非常有用的信息,有关将多个数据库查询合并到一个“mega”查询中,可以找到HERE。
我扩展了其中一个子查询,这个查询从photos
表中选择一张随机照片,以显示页面上显示的每个项目。对于初学者,这是原始帖子HERE中的表格:
+----------+------------+--------+
| photo_id | project_id | active |
|--------------------------------|
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
| 4 | 2 | 1 |
| 5 | 2 | 1 |
| 6 | 2 | 1 |
| 7 | 3 | 1 |
| 8 | 3 | 1 |
| 9 | 3 | 1 |
+----------+------------+--------+
这是在我提到的HERE
帖子中向我推荐的子查询(SELECT photo_id FROM Photos
where project_id = p.project_id ORDER BY RAND LIMIT 1) as random_photo,
我添加了与每个图像相关联的其他列,文件名,图库编号,每个图像的宽度以及每个图像的高度。
+----------+------------+----------+--------+---------+-------+--------+
| photo_id | filename project_id | active | gallery | width | height |
|----------------------------------------------------------------------|
| 1 | pic1.jpg | 1 | 1 | 1 | 600 | 400 |
| 2 | pic2.jpg | 1 | 1 | 1 | 600 | 400 |
| 3 | pic3.jpg | 1 | 1 | 1 | 400 | 600 |
| 4 | pic4.jpg | 2 | 1 | 2 | 600 | 400 |
| 5 | pic5.jpg | 2 | 1 | 2 | 600 | 400 |
| 6 | pic6.jpg | 2 | 1 | 2 | 600 | 400 |
| 7 | pic7.jpg | 3 | 1 | 3 | 400 | 600 |
| 8 | pic8.jpg | 3 | 1 | 3 | 400 | 600 |
| 9 | pic9.jpg | 3 | 1 | 3 | 400 | 600 |
+----------+------------+----------+--------+---------+-------+--------+
我更新了查询,只选择宽度大于高度的图片,以便只选择风景图片:
(SELECT filename FROM photos
WHERE project_id = p.project_id AND width > height ORDER BY RAND() LIMIT 1) as random_photo,
这可以按照需要运作。
我的新障碍是想要为随机图像选择文件名和相关的图库编号,这就是我被困住的地方。在我的原始帖子(HERE)中,有另一个子查询从另一个表中选择一个标记列表,它使用SELECT GROUP_CONCAT
所以我尝试了很多方法,但这显然是我的一个区域在我的头上。
我也尝试在第二个子查询中使用random_photo
,如下所示:
(SELECT gallery FROM photos
WHERE filename = random_photo) as gallery_number,
它不起作用。理想情况下,我想一次性检索随机照片文件名及其相关的图库编号。如果我在这里遗漏了一些明显的东西,我会道歉,并提前感谢您的帮助。
答案 0 :(得分:1)
简单但有点尴尬的解决方案是:
(SELECT Concat(gallery,'___',filename) FROM photos
WHERE project_id = p.project_id AND width > height ORDER BY RAND() LIMIT 1) as random_photo
如果使用上述解决方案,则需要在php代码中首次出现“___”时分割结果。
更复杂的解决方案是选择随机ID而不是将结果加入到照片表中,但这取决于“大型查询”的其他部分如何执行此操作。