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");   

このクエリのすべては、メイン テーブルの同じ ID にも一致する 2 番目の結合を追加するまで問題なく機能していました。Where 句はすべて正常に機能し、両方の ON 条件を使用した最初の結合が機能しました。2 番目の JOIN 句に問題があるようです。

基本的にsubscribersMasterは、すべてのレコードの詳細(住所、電話番号など)を含むメインテーブルです。CommodityMaster と IndustryMaster は、どの業界で働いているか、どの商品を販売しているかについての詳細を保存します。

EDIT**クエリをエコーすると、次のようになります。

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
4

2 に答える 2

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
于 2013-09-27T13:51:03.990 に答える
0

industryMasterJOINを に変更してLEFT OUTER JOIN、データが返されるかどうかを確認しsubscribermasterます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
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
于 2013-09-27T14:17:08.887 に答える