2012-08-31 42 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"; 
}