2012-08-31 6 views
1

나는 자동차 소유자가 검색하는 SELECT 쿼리를 사용합니다. 모든 소유자는 한 대 이상의 자동차를 소유 할 수 있습니다. 무작위 우리는 소유자를 찾아야하는 자동차 목록을 생성했습니다. 한 소유자가 예를 들어 두 번 이상 사용하는 경우Mysql 동일한 쿼리

... 

$owners[] = $dbaseowners["ownerid"] // owner ID's fetched from database 

$owners = implode (',',$owners); 

SELECT carname FROM cars WHERE ownerid IN ($owners); 

내 문제가 : IN (1,1,4,1) - MySQL의 경우에만이 소유자의 데이터를 하나의 '사본'을 가져옵니다.

나는 임의로 생성 된 자동차 목록을 가지고 있기 때문에 소유자가 동일한 경우에도 모든 자동차의 소유자 행을 가져야합니다.

아이디어가 있으십니까?

+1

그것은 보이지 않는다. 귀하의 질의가 귀하의 목록에있는 소유자와 함께 모든 카네이션을 반환 할 것 같습니다. 따라서 한 명의 소유자가 10 대의 자동차를 소유 한 경우 모두 10 대가 결과 세트에 포함됩니다. –

+2

귀하의 진술은 "무작위로 생성 된 자동차 목록이 있습니다"라고 말합니다. 그러나 코드에 "ownerid in ($ owners)"이 있습니다. 무엇 이니? 무작위로 선택된 자동차 또는 소유자 목록? –

+0

자동차 목록이 데이터베이스에서 이미 가져 왔습니다. 모든 자동차에는 $ owner 변수에 수집 된 ownerID가 있으며 그 다음에 목록에 어떤 자동차가 있는지에 따라 소유자를 검색하는 선택 쿼리가 있습니다. 문제는 mysql이 IN() 문 내에서 같은 수의 쿼리를 중복하지 않는다는 것입니다. 하지만 나는 그 목록에 어떤 차가 있는지 알지 못하고 하나의 소유자가 하나 이상의 차를 소유 할 수 있기 때문에 그걸 필요로합니다. –

답변

2

나는 당신이 디자인을 수정하고 자동차를 소유주와 관련시키기 위해 조인 테이블을 가지고 있어야한다고 생각한다. 테이블의 한 행에 1,1,4,1을 갖는 것은 첫 번째 정규 형식과 호환되지 않으므로 사용하지 않아야합니다.

+0

자동차를 여러 소유자가 소유하지 않는 한 조인 테이블이 필요하지 않습니다. 그러나 조인 쿼리가 필요합니다. –

0

배열에서 중복 된 값을 제거하는 array_unique를 사용해보십시오 :

... 

$owners[] = $dbaseowners["ownerid"] // owner ID's fetched from database 

$owners = implode (',', array_unique($owners)); 

SELECT carname FROM cars WHERE ownerid IN ($owners); 
0

이 시도 : 조회 어떤 소유자 정보를 가져 오는 것 같은

$sql = mysql_query("SELECT `ownerid`, `carname` FROM `cars` WHERE `ownerid` IN (".array_unique($owners).")"); 
$ret = Array(); 
while($row = mysql_fetch_assoc($sql)) $ret[$row['ownerid']] = $row['carname']; 
foreach($owners as $owner) { 
    echo $owner.": ".$ret[$owner]."<br />\n"; 
}