1

車の所有者で検索する SELECT クエリがあります。すべての所有者は複数の車を持つことができます。所有者を見つけなければならない車のランダムに生成されたリストがあります。

...

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

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

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

私の問題は、1 人の所有者が複数回使用されている場合です。たとえば、IN (1,1,4,1) - mysql は、この所有者のデータの「コピー」を 1 つだけフェッチします。

私はランダムに生成された車のリストを持っているので、所有者が同じかどうかに関係なく、すべての車の所有者の行が必要です。

何か案は?

4

3 に答える 3

2

設計を修正し、所有者を車に関連付ける結合テーブルを作成する必要があると思います。table の 1 つの行に 1,1,4,1 があることは、最初の正規形に準拠していないため、使用を避ける必要があります。

于 2012-08-31T18:45:40.650 に答える
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);
于 2012-08-31T19:05:18.617 に答える
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";
}
于 2012-08-31T19:11:51.677 に答える