2012-07-24 47 views
1

好吧我有兩個mysql表格,其中一個存放電影的詳細信息,即標題說明等。我在此表中列出了一個名爲獎項的列,現在我需要能夠將多個圖像附加或鏈接到此列中的單個記錄。將多個URL從一個錶鏈接到另一個表中的單個記錄?

我有一個單獨的表格,其中包含獲獎者png的url鏈接,但我不確定如何鏈接它們。

現在,第二部分是在一個頁面上顯示這個信息,每個url分開,並在它自己的div,我猜explode()可以工作分裂。

我知道這是一對多關係,但我找不到任何可以完成這項工作的東西。

如果有人能夠對此有所瞭解,我將非常感激。

回答

2

一種技術,你可以做是加入兩個表,並使用SELECT GROUP_CONCAT作爲一個單一的變量連接值,是的,你可以爆炸()稍後打破它們。

實際上使用GROUP_CONCAT,這是你可以做什麼:

mysql> SELECT f.name, GROUP_CONCAT(a.url SEPARATOR ",") AS awards FROM film f JOIN awards a ON a.film_id = f.id; 
+-----------------------+-----------------------------------------------------------------------------+ 
| name     | awards                  | 
+-----------------------+-----------------------------------------------------------------------------+ 
| River Runs Through It | http://www.ariverrunsthroughit.com,http://www.webby.com,http://www.imdb.com | 
+-----------------------+-----------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> 

在PHP中,你使用上面的查詢查詢數據庫,並說這是一個變量,名爲$行輸出,那麼你可以如您注意到的那樣,將獎勵變量分解並輸出到單獨的DIVS中。

<?php 
// connection 

$query = mysql_query("SELECT f.name, GROUP_CONCAT(a.url SEPARATOR ",") AS awards FROM film f JOIN awards a ON a.film_id = f.id"); 

while ($row = mysql_fetch_array($query)) { 
    $title = $row['name']; 
    // get awards 
    $awards = explode(",", $row['awards']); 

    // output title and awards (iterate through array) 
    echo "<hr>"; 
    echo "<div id='title'>$title</div>"; 
    foreach ($awards AS $award) { 
     echo "<div id='award'>$award</div>"; 
    } 
} 

這裏是SQL來構建測試:

mysql> create table film (id INT AUTO_INCREMENT, name VARCHAR(24), PRIMARY KEY (id)); 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO film VALUES (1, "River Runs Through It"); 
Query OK, 1 row affected (0.00 sec) 

mysql> CREATE TABLE awards (id INT AUTO_INCREMENT, film_id INT NOT NULL, url VARCHAR(64), title VARCHAR(24), PRIMARY KEY (id)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> INSERT INTO awards VALUES (1,1,'http://www.ariverrunsthroughit.com','Our Award'), (2,1,'http://www.webby.com', 'Webby Award'), (3,1,'http://www.imdb.com', 'IMDB Award'); 
Query OK, 3 rows affected (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 0 
0

如果你想在結果中的一個字段中的所有圖像,你可以使用

SELECT 
films.* 
GROUP_CONCAT(images.url SEPARATOR ',') as image_urls 
FROM films 
LEFT JOIN images ON images.film_id = film.id 
WHERE ... 

然後使用爆炸(',',$ row-> image_urls)來分隔這些網址。

+0

感謝這似乎工作與一些小調整。 – Tom 2012-07-24 20:12:38

相關問題