2013-09-27 42 views
0
$result = mysql_query("SELECT DISTINCT subscriberMaster.id,  
subscriberMaster.locationCodeID, subscriberMaster.firstName, 
subscriberMaster.lastName, subscriberMaster.company, subscriberMaster.address, 
subscriberMaster.address2, subscriberMaster.city, subscriberMaster.province, 
subscriberMaster.postalCode, subscriberMaster.country, 
subscriberMaster.numLabels 
FROM subscriberMaster 
JOIN commodityMaster ON commodityMaster.subscriberID = subscriberMaster.id AND 
commodityMaster.commodityID IN (" . $commodityquery2 . ") 
JOIN industryMaster ON industryMaster.subscriberID = subscriberMaster.id AND 
industryMaster.industryID IN (" . $industryquery2 . ") 
WHERE subscriberMaster.locationCodeID = $locationCodeID AND 
subscriberMaster.province IN (" . $provincequery2 . ") AND 
(subscriberMaster.deleted = 0) AND (subscriberMaster.expiryDate = '00-00-00') 
OR (subscriberMaster.expiryDate > NOW()) ORDER BY $orderBy ASC"); 
$result = mysql_query("SELECT DISTINCT subscriberMaster.id,  
subscriberMaster.locationCodeID, subscriberMaster.firstName, 
subscriberMaster.lastName, subscriberMaster.company, subscriberMaster.address, 
subscriberMaster.address2, subscriberMaster.city, subscriberMaster.province, 
subscriberMaster.postalCode, subscriberMaster.country, 
subscriberMaster.numLabels 
FROM subscriberMaster 
JOIN commodityMaster ON commodityMaster.subscriberID = subscriberMaster.id AND 
commodityMaster.commodityID IN (" . $commodityquery2 . ") 
JOIN industryMaster ON industryMaster.subscriberID = subscriberMaster.id AND 
industryMaster.industryID IN (" . $industryquery2 . ") 
WHERE subscriberMaster.locationCodeID = $locationCodeID AND 
subscriberMaster.province IN (" . $provincequery2 . ") AND 
(subscriberMaster.deleted = 0) AND (subscriberMaster.expiryDate = '00-00-00') 
OR (subscriberMaster.expiryDate > NOW()) ORDER BY $orderBy ASC"); 

这个查询中的一切都工作得很好,直到我添加了第二个连接,它也匹配主表中的相同ID。 Where子句全部正常,第一次加入ON条件。这似乎是第二个JOIN子句的问题。加入其他表和2在条件加入表

基本上subscribersMaster是所有记录详细信息(地址,电话号码等)的主表。 CommodityMaster和IndustryMaster存储他们在哪些行业工作的细节以及他们销售的商品。

编辑** 下面是我回应查询时出现的内容。

SELECT DISTINCT subscriberMaster.id, subscriberMaster.locationCodeID, 
subscriberMaster.firstName, subscriberMaster.lastName, subscriberMaster.company, 
subscriberMaster.address, subscriberMaster.address2, subscriberMaster.city, 
subscriberMaster.province, subscriberMaster.postalCode, subscriberMaster.country, 
subscriberMaster.numLabels FROM subscriberMaster 
JOIN commodityMaster ON commodityMaster.subscriberID = subscriberMaster.id 
JOIN industryMaster ON industryMaster.subscriberID = subscriberMaster.id 
WHERE subscriberMaster.locationCodeID = 1 AND commodityMaster.commodityID IN ('1', 
'2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19', 
'20','21','22','23','24','25','26','27','28','29','30','31','32','33') AND 
industryMaster.industryID IN ('1','3','2') subscriberMaster.province IN 
('Ontario') AND (subscriberMaster.deleted = 0) AND (subscriberMaster.expiryDate = 
'00-00-00') OR (subscriberMaster.expiryDate > NOW()) 
ORDER BY company ASC 
+0

你能提供的SQL上面查询的小窍门,带有示例数据集和您想要查询的结果集 –

+0

这里有什么问题?你有没有得到任何错误或数据不返回? –

+0

没有错误,只是没有返回。 – user2823610

回答

0

我会将附加约束从JOIN部分移至WHERE部分。这是它应该的地方。

SELECT DISTINCT 
    subscriberMaster.id,  
    subscriberMaster.locationCodeID, 
    subscriberMaster.firstName, 
    subscriberMaster.lastName, 
    subscriberMaster.company, 
    subscriberMaster.address, 
    subscriberMaster.address2, 
    subscriberMaster.city, 
    subscriberMaster.province, 
    subscriberMaster.postalCode, 
    subscriberMaster.country, 
    subscriberMaster.numLabels 
    FROM subscriberMaster 
     JOIN commodityMaster 
      ON commodityMaster.subscriberID = subscriberMaster.id 
     JOIN industryMaster 
      ON industryMaster.subscriberID = subscriberMaster.id 
    WHERE subscriberMaster.locationCodeID = $locationCodeID 
     AND commodityMaster.commodityID IN (" . $commodityquery2 . ") 
     AND industryMaster.industryID IN (" . $industryquery2 . ") 
     AND subscriberMaster.province IN (" . $provincequery2 . ") 
     AND (subscriberMaster.deleted = 0) 
     AND (subscriberMaster.expiryDate = '00-00-00') 
     OR (subscriberMaster.expiryDate > NOW()) 
    ORDER BY $orderBy ASC 
+0

仍然无法正常工作。我测试了两种连接方式,只使用一种,两种都可以自己工作。但只要我使用它们,他们就会停止显示任何结果。 – user2823610

+0

尝试没有WHERE子句的语句。我猜想是有问题的...... –

+0

了解了where子句,但仍然无法正常工作。还是你的意思是拿出WHERE这个词并继续条件? – user2823610

0

您industryMaster JOIN更改为LEFT OUTER JOIN,看看它是否返回数据,我认为你没有在industrymaster所有subscribermaster ID行,试试这个

SELECT DISTINCT subscriberMaster.id,  
subscriberMaster.locationCodeID, subscriberMaster.firstName, 
subscriberMaster.lastName, subscriberMaster.company, subscriberMaster.address, 
subscriberMaster.address2, subscriberMaster.city, subscriberMaster.province, 
subscriberMaster.postalCode, subscriberMaster.country, 
subscriberMaster.numLabels 

FROM subscriberMaster 
LEFT OUTER JOIN commodityMaster 
    ON commodityMaster.subscriberID = subscriberMaster.id 
    AND commodityMaster.commodityID IN (" . $commodityquery2 . ") 

LEFT OUTER JOIN industryMaster 
    ON industryMaster.subscriberID = subscriberMaster.id 
    AND industryMaster.industryID IN (" . $industryquery2 . ") 

WHERE subscriberMaster.locationCodeID = $locationCodeID AND 
subscriberMaster.province IN (" . $provincequery2 . ") AND 
(subscriberMaster.deleted = 0) AND (subscriberMaster.expiryDate = '00-00-00') 
OR (subscriberMaster.expiryDate > NOW()) 
ORDER BY $orderBy ASC 
+0

仍然无法正常工作。我测试了两种连接方式,只使用一种,两种都可以自己工作。但只要我使用它们,他们就会停止显示任何结果。 – user2823610