我有一个使用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
的列表
答案 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标准。