如何忽略SQL查询中哪些行的特定ID PHP

时间:2018-09-16 08:45:54

标签: sql

我有一个使用php的简单商店,我需要在管理页面上忽略商店中的某些产品。如何在SQL查询中忽略?

这是我的查询:

$query = "SELECT a.*, 
                 a.user as puser, 
                 a.id as pid, 
                 b.date as date, 
                 b.price as price, 
                 b.job_id as job_id, 
                 b.masterkey as masterkey 
          FROM table_shop a 
          INNER JOIN table_shop_s b ON a.id = b.buyid 
          WHERE b.payok = 1 
          ORDER BY buyid";

在此查询中,我需要忽略表product_id = "3","4"中带有table_shop_s的列表

3 个答案:

答案 0 :(得分:0)

WHERE b.payok = 1 AND tablename.product_id != 3 AND tablename.product_id != 4

答案 1 :(得分:0)

仅在逻辑条件为NOT IN的情况下使用AND(忽略特定的pids)。使用以下内容:

$query = "SELECT a.*, 
                 a.user as puser, 
                 a.id as pid, 
                 b.date as date, 
                 b.price as price, 
                 b.job_id as job_id, 
                 b.masterkey as masterkey 
          FROM table_shop a 
          INNER JOIN table_shop_s b ON a.id = b.buyid 
          WHERE b.payok = 1 
            AND a.id NOT IN (3,4) 
          ORDER BY buyid";

答案 2 :(得分:0)

其他答案已指出您可能会使用“ productid NOT IN(3,4)”,该方法将起作用,但这只是短期解决方案。扩展思想。现在有2个产品,但是将来您想隐藏/阻止更多吗?然后,如何更改所有查询并错过某些内容?

我的建议是更新您的产品表。添加一列,例如ExcludeFlag,并将其设置为1或0 ... 1 =是,排除,0 =确定,请保留它。然后将您的商店明细表加入产品中,并在设置此标志时将其排除在外...此外,在更改结果列名称时,只需要将列设置为“ As”,此外,通过执行A. *,您已经获得了ALL别名“ a”表中的列中,您是否真的需要添加“ a.user作为puser,a.id作为pid”的额外实例?

类似

SELECT 
      a.*, 
      b.date, 
      b.price, 
      b.job_id, 
      b.masterkey
   FROM 
      table_shop a
         INNER JOIN table_shop_s b 
            ON a.id = b.buyid 
           AND b.payok = 1 
           INNER JOIN YourProductTable ypt
              on b.ProductID = ypt.ProductID
             AND ypt.ExcludeFlag = 0
   ORDER BY 
      a.id

请注意额外的联接,特别是包括未设置标志的所有联接。 另外,优良作法是将表名别名化为更接近目的上下文,而不仅仅是“ a”和“ b”,这与我将别名为ypt的长表YourProductTable的示例类似。

我也将顺序更改为“ a.id”,因为这是您查询中的主表,并且由于a.id = b.buyid,无论如何它都是相同的键顺序,并且很可能在您的“一个“表。我假设table_shop_s表已经在(buyid)上建立了索引,但是当您获得很多要在(buyid,payok​​)上建立索引的记录时,它可能会有所改善,以便更好地匹配两个部分上的JOINING标准。