2012-07-24 42 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

相关问题