【发布时间】:2011-04-13 17:22:15
【问题描述】:
我有一个很长的 sql 语句,我正在尝试添加一些 AND 条件,但它不起作用。
这是我的声明:
if($cat=="att") { $sqlCatC = "INNER JOIN yt_att_data CAT
ON CAT.busID = R.id AND CAT.subcatID = 5 AND CAT.subcatID = 136 AND CAT.deleted = 0"; }
//Get RegionInfo busID based on region, approved
$sql= "SELECT DISTINCT CAT.busID,R.id,companyName,membershipID,addressID,city,logo,descriptionShort FROM yt_Business_RegInfo R
$sqlReg
INNER JOIN yt_Business_Seasons S
ON R.id = S.busID AND S.deleted = 0
INNER JOIN yt_Business_Address A
ON R.addressID = A.id
INNER JOIN yt_Business_Membership M
ON R.membershipID = M.id AND M.approved = 1
$sqlCatC
WHERE R.deleted = 0
ORDER BY R.companyName ASC LIMIT $start, $limit";
我试图在顶部的 $sqlCatC 中添加 CAT.subcatID 等于 5 和 136 的 AND 条件。它适用于检查单个 CAT.subcatID 但不适用于两个。任何建议将不胜感激。
【问题讨论】:
-
对于单个行,
CAT.subcatID不能同时是5和136。您需要OR还是在寻找relational division(在这种情况下您需要OR、GROUP BY和HAVING)? -
怎么不工作?你有错误吗?还是错误的结果?如果是这样,结果如何错误?我怀疑你可能想要一个 OR 而不是 AND。
-
如果我使用 OR 那么它只显示选择的 subcatID 5 或 136 的记录。我需要它来显示同时选择的公司记录。它基本上是一个公司记录,它已检查了某些标准,如果这两个都被检查,我需要显示它。
-
在这种情况下,除了使用
OR(或IN)之外,您还需要GROUP BY和HAVING COUNT(DISTINCT subcatID)=2 -
@Martin - 谢谢。这是我尝试过的,但我得到了一个 mysql 错误。 'INNER JOIN yt_att_data CAT ON CAT.busID = R.id AND CAT.deleted = '0' AND CAT.subcatID IN(5,136) GROUP BY CAT.subcatID HAVING COUNT(DISTINCT CAT.subcatID)=2'