![](/img/trans.png)
[英]How do i run inner join and make variables which show dynamic page in php
[英]How do I run three table INNER JOIN in PHP?
我需要根据producttags表和subcategorytags表在几个表中查询“ product tags”。
然后生产标签为“衬衫”的产品。
如果删除第一个内部WHERE t.producttag = 'shirt'
,并且删除“ WHERE t.producttag = 'shirt'
”,那么它将起作用。 与subcategorytags部分相同。
但是,当我同时尝试两者时,它不会出错,但是不会产生任何结果。
SELECT p.datebackinstock, p.datepricedrop, p.id, p.catid, p.subid, p.catname, p.subname,
p.title, p.price, p.photoprimary, p.comingsoon, p.rcstock, p.preorder,
p.bundleroman1, p.bundleroman2, p.bundleroman3, p.bundleroman4, p.bundleroman5,
p.pricedrop FROM products AS p
INNER JOIN producttags AS t ON p.id = t.prodid
INNER JOIN subcategorytags AS s ON p.subid = s.subid
WHERE t.producttag = 'shirt' OR s.tag = 'shirt'
您将为此使用左连接,因为您不知道设置了标记。 在您的查询中,仅当找到产品producttag
和 subcategorytag
producttag
,才返回该行。 即使在另一个表中未找到行,左联接也会返回该行。 因此,您还需要进行额外的检查以确保值不为空。
SELECT p.datebackinstock, p.datepricedrop, p.id, p.catid, p.subid, p.catname, p.subname,
p.title, p.price, p.photoprimary, p.comingsoon, p.rcstock, p.preorder,
p.bundleroman1, p.bundleroman2, p.bundleroman3, p.bundleroman4, p.bundleroman5,
p.pricedrop FROM products AS p
LEFT JOIN producttags AS t ON p.id = t.prodid
LEFT JOIN subcategorytags AS s ON p.subid = s.subid
WHERE (t.producttag NOT NULL AND t.producttag = 'shirt') OR (s.tag NOT NULL AND s.tag = 'shirt')
可以在mysql docs中找到有关左右联接的更多信息。
我会使用left outer join
或更确切地说,我会尝试:
select
p.`datebackinstock`,
p.`datepricedrop`,
p.`id`,
p.`catid`,
p.`subid`,
p.`catname`,
p.`subname`,
p.`title`,
p.`price`,
p.`photoprimary`,
p.`comingsoon`,
p.`rcstock`,
p.`preorder`,
p.`bundleroman1`,
p.`bundleroman2`,
p.`bundleroman3`,
p.`bundleroman4`,
p.`bundleroman5`,
p.`pricedrop`
from `products` p
left outer join `producttags` t on p.`id` = t.`prodid`
left outer join `subcategorytags` s on p.`subid` = s.`subid`
where t.`producttag` = 'shirt' or s.`tag` = 'shirt'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.