2014-01-12 29 views
0

我是PHP編程的新手,我現在需要某人的幫助。我有兩張桌子。表2 I具有存儲在像選擇多個圖像網址並在行中加載

id   image URL  order 
12345 www.abc.com/xxx.jpg 0 
12345 www.abc.com/yyy.jpg 1 
12346 www.abc.com/zzz.jpg 0 
12346 www.abc.com/aaa.jpg 1 
12346 www.abc.com/vvv.jpg 2 
12346 www.abc.com/333.jpg 3 
12347 www.abc.com/vvf.jpg 0 
12347 www.abc.com/111.jpg 1 

圖像鏈接在表1中

id   name 
12345 something1 
12346 something2 
12347 something3 
. 
. 

我必須加載數據LEFT JOIN後,用表1與鍵標識。假設table1也有7個變量。我需要的輸出是

id name(table1) img1(oforder0) img2(oforder1) img3(of order2) img4(oforder3) 
12345 something1 www.abc.com/xxx.jpg www.abc.com/yyy.jpg - - 
12346 something2 www.abc.com/zzz.jpg www.abc.com/aaa.jpg  www.abc.com/vvv.jpg www.abc.com/333.jpg 
12347 something 3 www.abc.com/vvf.jpg www.abc.com/111.jpg - - 

是否有可能首先做?我所有的嘗試,直到現在是循環圖像名稱&使用Where命令='$我'並創建自己的變量,這似乎並不工作。
因爲我不希望ID和名稱字段重複一遍又一遍。我需要有人幫助在這裏選擇正確的方式來獲取URL在同一行(如果可能的話)

+0

是圖像的數目準確地等於3或<= 3,或者是它的可變/未知,可能> 3? –

+0

它是_is_可能的,並且有兩種方法可以根據我對第一個問題的回答進行處理。 –

+0

邁克爾,我有多達11個圖像在數據庫中的每個ID。我需要的只是4張圖片的網址。 – Selva

回答

2

如果您需要準確4出11頁圖像的URL,你可以使用條件聚集

SELECT t1.id, t1.name, 
     MAX(CASE WHEN t2.order = 0 THEN image_url END) img1, 
     MAX(CASE WHEN t2.order = 1 THEN image_url END) img2, 
     MAX(CASE WHEN t2.order = 2 THEN image_url END) img3, 
     MAX(CASE WHEN t2.order = 3 THEN image_url END) img4 
    FROM table1 t1 LEFT JOIN table2 t2 
    ON t1.id = t2.id 
    GROUP BY t1.id 

輸出:

 
| ID |  NAME |    IMG1 |    IMG2 |    IMG3 |    IMG4 | 
|-------|------------|---------------------|---------------------|---------------------|---------------------| 
| 12345 | something1 | www.abc.com/xxx.jpg | www.abc.com/yyy.jpg |    (null) |    (null) | 
| 12346 | something2 | www.abc.com/zzz.jpg | www.abc.com/aaa.jpg | www.abc.com/vvv.jpg | www.abc.com/333.jpg | 
| 12347 | something3 | www.abc.com/vvf.jpg | www.abc.com/111.jpg |    (null) |    (null) | 

另一種解決方案可能是包所有圖像的URL到每個ID一列(姑且稱之爲URL)的使用GROUP_CONCAT()這樣

SELECT t1.id, t1.name, 
     GROUP_CONCAT(CONCAT(t2.order + 1, '|', t2.image_url) ORDER BY t2.order) urls 
    FROM table1 t1 LEFT JOIN table2 t2 
    ON t1.id = t2.id 
    AND t2.order <= 3 
    GROUP BY t1.id 

,然後explode(分割)urls值首先由逗號,然後通過管道|當你遍歷結果集。

注意:這種方法更具動態性。您可以在不更改查詢本身的情況下輕鬆更改想要的圖片網址的數量。

輸出:

 
| ID |  NAME |                     URLS | 
|-------|------------|-----------------------------------------------------------------------------------------| 
| 12345 | something1 |            1|www.abc.com/xxx.jpg,2|www.abc.com/yyy.jpg | 
| 12346 | something2 | 1|www.abc.com/zzz.jpg,2|www.abc.com/aaa.jpg,3|www.abc.com/vvv.jpg,4|www.abc.com/333.jpg | 
| 12347 | something3 |            1|www.abc.com/vvf.jpg,2|www.abc.com/111.jpg | 

這裏是SQLFiddle演示

+1

你可以有我的SQLfiddle。我正處於更長時間的解釋中。 –

+1

@MichaelBerkowski我已經差不多完成了我的工作(sqlfiddle),但是非常感謝:) – peterm

+0

我現在要做的查詢,我會讓你的輸出儘快!感謝您的幫助 – Selva