好吧我有两个mysql表,一个包含电影的详细信息,即标题描述等。我在这个表中有一个名为awards的列,现在我需要能够将几个图像附加或链接到此列中的单个记录。
我有一个单独的表格,其中包含指向奖项的网址的链接,但我不确定如何链接它们。
现在第二部分是在一个页面上显示这些信息,每个url是独立的,并且在它自己的div中,我猜测explode()可能会分裂。
我知道这是一对多的关系,但我找不到任何可以胜任的工作。
如果有人能对此有所了解,我将非常感激。
答案 0 :(得分: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的变量中输出的,那么您可以将奖励变量爆炸并输出到您指出的单独的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
答案 1 :(得分: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
答案 2 :(得分: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-&gt; image_urls)来分隔网址。