1

さて、2 つの mysql テーブルがあり、1 つは映画の詳細、つまりタイトルの説明などを保持しています。このテーブルには、賞という名前の列があり、この列内の単一のレコードに複数の画像を添付またはリンクできるようにする必要があります。

アワードのpngのURLへのリンクを保持する別のテーブルがありますが、それらをリンクする方法がわかりません。

パート 2 は、この情報をページに表示し、各 URL を個別に独自の div に表示することです。explode() で分割できると思います。

1対多の関係であることは知っていますが、その仕事をするものは何も見つかりませんでした.

誰かがこれに光を当てることができれば、私はとても感謝しています.

4

3 に答える 3

2

実行できる手法の 1 つは、2 つのテーブルを JOIN し、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
于 2012-07-24T19:32:46.970 に答える
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) を使用して URL を区切ります。

于 2012-07-24T19:36:25.727 に答える
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 に答える