早在1月份,我收到了一些關於將多個數據庫查詢合併爲一個「兆」查詢的非常有用的信息,它可以找到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,
,並沒有奏效。理想情況下,我想一次性檢索隨機照片文件名及其關聯的圖庫編號。我很抱歉,如果我在這裏丟失了一些明顯的東西,並且預先感謝您的幫助。
謝謝你。有幾個問題:具體是什麼「___」在做,這相當於','嗎?此外,在你看來,是什麼讓這個尷尬的解決方案?至於你對複雜解決方案的建議,我同意。 – mileaminute
___只是一個分隔符,所以你可以拆分2列,這兩列在你的php代碼中合併成一個。您在圖庫2中的圖片pic001.jpg的結果將爲'2 ___ pic001.jpg',全部在一列中。這也是它的尷尬,它需要一些膠水代碼。如果您不小心並且文件名包含'___',它也可能會導致其他問題。如果你只是在第一次出現時分裂,這不應該引起問題,你甚至可以使用更短的分隔符,如' - ',但你需要知道它。它適用於所有文件名,因爲int gallerynumber放在文件名之前。 – Compufreak
很好的解釋,謝謝。我在我的php代碼中爆炸了綁定變量,並能夠根據需要輸出數據。非常感謝! – mileaminute