2011-10-12 179 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);