2011-10-12 212 views
1

我有一大堆輪胎品牌和信息的數據庫。我有一個名爲Accepted_Brands的表,它具有shop_id和brand_id,因此它告訴我哪個商店攜帶了什麼品牌。MySQL SELECT查詢 - 排除某些行

tyre_brands表只是一個id和一個名字,列出了所有的輪胎品牌。

在該特定商店的頁面上,我列出了他們銷售的所有輪胎品牌..並且可以添加一個新品牌。

添加新的品牌彈出只是有一個下拉列表,這裏是我的代碼:

if ($result = $mysqli->query('SELECT id, name FROM tire_brands ORDER BY name')) { 

     while($row = $result->fetch_assoc()){ 
      $tire_name = $row['name']; 
      $tire_id = $row['id']; 

      echo "<option value=\"".$tire_id."\">".$tire_name."</option>"; 
     } 

所以它顯示了所有在下拉,他們可以選擇將其添加到他們的接受列表輪胎品牌。問題是它顯示了所有這些,即使它已被選中。所以我可以添加兩個相同的品牌。

有沒有一種方法可以將它從SELECT查詢中排除,或以其他方式使下拉列表只顯示他們未使用的品牌列表?

謝謝!

回答

1

試試這個:

SELECT id, name FROM tire_brands 
WHERE id NOT IN (SELECT tire_brand_id FROM Accepted_Brands WHERE shop_id=XXX) 
ORDER BY name 
+0

謝謝!工作完美。並感謝所有幫助過我的人。對此,我真的非常感激。 – Drew

1
SELECT id, name FROM tire_brands WHERE name NOT IN (....,....,....) ORDER BY name 

...與....代表你。

1

通輪胎的逗號分隔的名字嘗試

SELECT t.id, t.name FROM tire_brands as t, Accepted_Brands as a WHERE t.id <> a.brand_id ORDER BY name 

所以你排除已經從你的結果集設置的品牌,多數民衆贊成。

1

您需要做一個更復雜的查詢來查找商店已經攜帶的品牌,並將這些品牌從您填入下拉列表的主品牌列表中排除。不知道你的表結構,以下僅僅是一個例子:

SELECT id, name 
FROM tire_brands 
WHERE (id NOT IN (
    SELECT brand_id 
    FROM store_carried_brands 
    WHERE store_id = XXX 
)) 
ORDER BY name 

而只是可以肯定,做一些服務器端檢查時「添加一個品牌」的形式提交,並且只有品牌加入到如果它尚未進入其攜帶品牌列表中,則進行存儲。即使你沒有用上面的查詢過濾可用的品牌,你也可以通過檢查添加這個「新」品牌實際上是否會產生一個愚蠢的行爲來阻止重複創建。

2

您可以修改您的查詢是這樣的:

SELECT id, name 
    FROM tire_brands 
    WHERE id NOT IN (SELECT brand_id FROM Accepted_Brands WHERE shop_id = current_shop) 
3

你必須使用這樣的子查詢:

if ($result = $mysqli->query('SELECT id, name FROM tire_brands where id NOT IN (select shop_id from Accepted_Brands) ORDER BY name')) { 

     while($row = $result->fetch_assoc()){ 
      $tire_name = $row['name']; 
      $tire_id = $row['id']; 

      echo "<option value=\"".$tire_id."\">".$tire_name."</option>"; 
     } 

這只是一個例子,我不知道你怎麼樣在Accepted_Brands上插入數據,以及如何瞭解某個ID是否已在Accepted_Brands表中

1

如果你最關心的是他們添加同一品牌兩次,你可以做的另一件事是在'accepted_brands'表上添加一個唯一的索引,所以'tire_id'和'shop_id'不能添加。

喜歡的東西:

ALTER TABLE accepted_brands ADD UNIQUE INDEX (tire_id, shop_id);