-1

これは私のクエリです

SELECT pl.NAME
  ,pl.id_product
  ,pl.link_rewrite
  ,i.id_image
  ,ar.id_auctions_rutcom
  ,ar.actual_bid_price
  ,ar.start_price
  ,ar.min_price
  ,ar.buy_now_price
  ,ar.finish_date
FROM ps_image i
  ,ps_auctions_rutcom ar
  ,ps_product_lang pl
WHERE ar.finish_date > '2013-07-26 11:18:15'
  AND ar.start_date < '2013-07-26 11:18:15'
  AND ar.active = 1
  AND ar.finish = 0
  AND pl.id_product = ar.id_product
  AND i.id_product = ar.id_product
  AND i.cover = 1
  AND pl.id_lang = 6

テーブル ps_image が i.id_product = ar.id_product の場合、クエリが false を返す画像がない場合に問題が発生します。クエリを true に設定するように変更するには?

4

3 に答える 3

2

について学ぶ必要がありますJOIN。ググってください。

あなたのクエリは次と同等ですINNER JOIN

SELECT 
  pl.name, pl.id_product, pl.link_rewrite, i.id_image, ar.id_auctions_rutcom,
  ar.actual_bid_price, ar.start_price, ar.min_price, ar.buy_now_price, ar.finish_date 
FROM ps_auctions_rutcom ar
INNER JOIN ps_product_lang pl 
        ON pl.id_product = ar.id_product 
       AND pl.id_lang = 6
INNER JOIN ps_image i
        ON i.id_product = ar.id_product 
       AND i.cover = 1 
WHERE ar.finish_date > '2013-07-26 11:18:15' 
  AND ar.start_date < '2013-07-26 11:18:15' 
  AND ar.active = 1 
  AND ar.finish = 0 

INNER JOIN場合、関連するテーブルに一致する行がない場合、その行は結果セットから除外されます。

ここで、 を使用する必要があります。OUTER JOINこの場合、行はまだ結果セットにあり、不足している情報は に設定されNULLます。

SELECT 
  pl.name, pl.id_product, pl.link_rewrite, i.id_image, ar.id_auctions_rutcom,
  ar.actual_bid_price, ar.start_price, ar.min_price, ar.buy_now_price, ar.finish_date 
FROM ps_auctions_rutcom ar
INNER JOIN ps_product_lang pl 
        ON pl.id_product = ar.id_product 
       AND pl.id_lang = 6
LEFT OUTER JOIN ps_image i
             ON i.id_product = ar.id_product 
            AND i.cover = 1 
WHERE ar.finish_date > '2013-07-26 11:18:15' 
  AND ar.start_date < '2013-07-26 11:18:15' 
  AND ar.active = 1 
  AND ar.finish = 0 
于 2013-07-26T10:07:19.677 に答える
0

結合をフィルターから分離してからleft join、画像が存在するかどうかに関係なくすべての結果を提供するためにa を使用する必要があります

FROM ps_auctions_rutcom ar 
    left join
    ps_image i on i.id_product = ar.id_product 
         and i.cover = 1 
    left join
    ps_product_lang pl on pl.id_product = ar.id_product 
         and pl.id_lang = 6
WHERE ....
于 2013-07-26T10:06:13.590 に答える
0

クエリに追加して、ps_image が null でないことを確認できます

i.id_product が NULL でない場合

于 2013-07-26T10:05:18.790 に答える