1

このクエリがあります

SELECT itemID, locationParentID, locationID, categoryParentID, categoryID, itemTitle, itemDetails, itemAttributes, itemPictures, itemFeatured, itemSpotlight, itemAdded 
FROM items 
WHERE locationID NOT IN
    (SELECT locationID 
    FROM sites_locations 
    WHERE siteID != 2) AND items.siteID IN('1,2') AND itemStatus = '1' 
    AND itemAdded > '1356048000'

正常に動作しますが、このクエリを実行すると失敗します

SELECT itemID, locationParentID, locationID, categoryParentID, categoryID, 
itemTitle, itemDetails, itemAttributes, itemPictures, itemFeatured, itemSpotlight, itemAdded FROM items 
WHERE locationID NOT IN
    (SELECT locationID 
     FROM sites_locations WHERE siteID != 2) 
     AND categoryID NOT IN (SELECT categoryID FROM sites_categories 
     WHERE siteID != 2) AND items.siteID IN('1,2') AND itemStatus = '1' 
     AND itemAdded > '1356048000' 

ここでの違いは、句を追加したことです

AND categoryID NOT IN(SELECT categoryID FROM sites_categories 
WHERE siteID != ".$cfg['site']['siteID'].") 

これがうまくいかない理由はありますか?

またはさらに良いのは、最適化に役立つ結合クエリです。

sites_categories のテーブル構造、データは ここに画像の説明を入力

アイテムのテーブル構造、データは ここに画像の説明を入力

sites_locations のテーブル構造 ここに画像の説明を入力

場所のテーブル構造、データは ここに画像の説明を入力

前もって感謝します。

4

3 に答える 3

1

これを試して

SELECT i.itemID, i.locationParentID, i.locationID, i.categoryParentID, i.categoryID, 
i.itemTitle, i.itemDetails, i.itemAttributes, i.itemPictures, i.itemFeatured, i.itemSpotlight, i.itemAdded 
FROM    items i,  sites_locations sl, sites_categories sc  
WHERE i.locationID = sl.locationID 
AND i.categoryID = sc.categoryID   
AND i.siteID = 1 AND i.itemStatus = '1' 
AND i.itemAdded > '1356048000'

エラーまたは列名に関連するエラーがある可能性がありますplこれらのエラーを修正します

于 2013-02-22T03:50:28.383 に答える
0

Solved

SELECT itemID, locationParentID, locationID, categoryParentID, categoryID, itemTitle, itemDetails, itemAttributes, itemPictures, itemFeatured, itemSpotlight, itemAdded FROM items WHERE items.siteID IN('1,2') AND items.locationID = (SELECT locationID FROM sites_locations sl WHERE sl.locationID = items.locationID AND siteID = '2') AND items.categoryID = (SELECT categoryID FROM sites_categories sc WHERE sc.categoryID = items.categoryID AND siteID = '2') AND itemStatus = '1' AND itemAdded > '1356048000' ORDER BY itemID DESC LIMIT 15 
于 2013-02-22T03:54:27.913 に答える
0

次のように結合に変えることができます。

SELECT i.itemID, i.locationParentID, i.locationID, i.categoryParentID, i.categoryID, 
       i.itemTitle, i.itemDetails, i.itemAttributes, i.itemPictures, i.itemFeatured,
       i.itemSpotlight, i.itemAdded
FROM items i left outer join
     sites_locations sl
     on i.locationID = sl.locationId and sl.siteId <> 2 left outer join
     sites_categories sc
     on i.categoryID = sc.categoryId and sc.siteId <> 2
WHERE sl.locationID is NULL and sc.categoryId is NULL and
      i.siteID IN (1, 2) AND i.itemStatus = 1 AND i.itemAdded > 1356048000

これにより、パフォーマンスが向上する場合もあります。

注: この SQL はテストしていないため、構文エラーがある可能性があります。特に、一部の列名の前にエイリアスを追加する必要がある場合があります (常に列名の前にエイリアスを使用することをお勧めします)。

于 2013-02-22T03:25:42.410 に答える