2012-07-24 4 views
1

좋아, 필자는이 테이블의 상을 여러 장의 영화에 붙이거나 하나의 레코드에 여러 개의 이미지를 연결할 수 있어야한다.한 테이블의 여러 URL을 다른 테이블의 단일 레코드에 연결 하시겠습니까?

본인에게는 PNG 수상자 링크에 대한 링크가있는 별도의 테이블이 있습니다. 그러나 링크하는 방법은 확실하지 않습니다.

이제 두 번째 부분은 각 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 ... 

그리고 나서 explode (',', $ row-> image_urls)를 사용하여 URL을 분리하십시오.

+0

감사합니다. 이것은 약간의 미세 조정으로 작동하는 것 같았습니다. – Tom

관련 문제