繁体   English   中英

MySQL SELECT查询-排除某些行

[英]MySQL SELECT Query - Exluding certain rows

我有一个包含一堆轮胎品牌和信息的数据库。 我有一个名为Accepted_Brands的表,其中包含shop_id和brand_id,因此它告诉我哪个商店带有哪个品牌。

tire_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查询中排除,或者以其他方式使下拉列表仅显示他们未使用的品牌列表?

谢谢!

您必须使用这样的子查询:

 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,brand是否已在Accepted_Brands表中

您可以将查询修改为:

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

...以....代表您传入的轮胎的逗号分隔名称。

尝试

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

因此您可以从结果集中排除已设置的品牌。

您需要执行更复杂的查询,以查找商店已经拥有的品牌,并将这些品牌从您要填充到下拉菜单的主品牌列表中排除。 在不知道您的表结构的情况下,以下仅是一个示例:

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

并且可以肯定的是,提交“添加品牌”表格时,请在服务器端进行一些检查,并且仅在该品牌不在其随身携带的品牌列表中时,才将该品牌添加到商店中。 即使您没有使用上述查询过滤可用的品牌,也可以通过检查添加此“新”品牌是否确实会创建重复项来阻止重复项的创建。

尝试这个:

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

如果您最关心的是他们两次添加同一品牌,那么您可以做的另一件事是在“ accepted_brands”表上添加唯一索引,因此无法添加“ tire_id”和“ shop_id”的相同组合。

就像是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM