2012-08-31 71 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

它似乎並不像你取你所查詢的任何所有者信息。在我看來,你的查詢將返回列表中所有者的所有carname。所以如果一個車主擁有10輛車,那麼所有10輛車都會在你的結果集中。 –

+2

您的陳述中說「有一個隨機生成的汽車列表」。但是,你的代碼有「ownerid in($ owners)」。這是什麼?隨機選擇的汽車或車主列表? –

+0

汽車列表已從數據庫中提取。每輛車都有ownerID,這些都是在$ owners變量中收集的,之後會有選擇查詢,我會根據哪些車輛在列表中搜索車主。問題是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"; 
}