1

好的,我有两个 mysql 表,一个包含电影的详细信息,即标题描述等。我在这个表中有一个名为 Awards 的列,现在我需要能够将多个图像附加或链接到该列中的单个记录。

我有一个单独的表格,其中包含指向 png 的 url 的链接,但我不确定如何链接它们。

现在第二部分是在一个页面上显示这些信息,每个 url 分开并在它自己的 div 中,我猜explode() 可以拆分。

我知道这是一对多的关系,但我找不到任何可以完成这项工作的东西。

如果有人能对此有所了解,我将不胜感激。

4

3 回答 3

2

您可以做的一种技术是加入两个表并使用 SELECT GROUP_CONCAT 将值连接为单个变量,是的,您可以在以后使用 explode() 将它们分解。

确实使用 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 中,您使用上面的查询查询数据库,并说它是在一个名为 $row 的变量中输出的,然后您可以分解 Awards 变量并按照您的说明输出到单独的 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
于 2012-07-24T19:32:46.970 回答
0

您要查找的内容称为联接。 http://www.w3schools.com/sql/sql_join.asp

所以在 MYSQL 中应该是这样的:

SELECT * FROM `movies` WHERE `movie_id` = 1 JOIN `awards` ON `awards.mid` = `movies.movie_id`

希望这会有所帮助:) 如果名称重叠,那么您可能需要为表/列命名:http ://www.w3schools.com/sql/sql_alias.asp

于 2012-07-24T19:32:35.833 回答
0

如果您想在结果中的单个字段中包含所有图像,您可以使用

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

然后使用 explode(',',$row->image_urls) 分隔网址。

于 2012-07-24T19:36:25.727 回答