2011-01-18 24 views
0

同じ名前の列を共有して出力する方法を熟考した後、それらを検索とページングが可能な形式で実装しました。このソリューションでは、stock_levelsなどのセット名を持つ「列」を作成し、その値をJSONとして入力して後で解析することができます。1対1の関係を1対多の関係で返す方法

これは意図したとおりに動作するが、しかし、私はaccrossに来た問題は、「場所」セクションで(product = quantityidproduct_id)がARNTただし場合、製品のIDたquantity内のすべての要素を返します製品IDがquantityのすべての要素は、システムに入力された新製品に在庫や画像がないため、製品自体は返されません。システムによって返されることはありません。

私の質問は

WHERE (`product`.`id` = `quantity`.`product_id` OR COUNT(`product`.`id` = `quantity`.`product_id`) = 0) 

(すなわち、それは量のエントリがない場合は、製品を返す)

そして(OFC動作するコードではなく)は、基本的にこれを行う方法がある、ことですここで使用したクエリのコードは次のとおりです。

SELECT DISTINCT `product`.*, 
CONCAT('[', GROUP_CONCAT('{', '"id":"', `quantity`.`id`, '"', ',', '"sku":"', `quantity`.`sku`, '"', ',', '"product_id":"', `quantity`.`product_id`, '"', ',', '"criteria":"', `quantity`.`criteria`, '"', ',', '"quantity":"', `quantity`.`quantity`, '"', ',', '"price":"', `quantity`.`price`, '"', '}' SEPARATOR ','), ']') as `stock_levels`, 
CONCAT('[', GROUP_CONCAT('{', '"id":"', `product_image`.`id`, '"', ',', '"product_id":"', `product_image`.`product_id`, '"', ',', '"location":"', `product_image`.`location`, '"', ',', '"type":"', `product_image`.`type`, '"', ',', '"order":"', `product_image`.`order`, '"', '}' SEPARATOR ','), ']') as `images` 
FROM (`product`, `quantity`, `product_image`) 
WHERE (`product`.`id` = `quantity`.`product_id`) 
AND (`product`.`id` = `product_image`.`product_id`) 
AND `online` = 1 
GROUP BY `product`.`id` 
ORDER BY date_added desc 

答えて

0

が左に合流...加入の右側に関係なく、試合の含まれ

FROM 
product p 
LEFT JOIN quantity q 
ON p.id = q.product_id 
LEFT JOIN product_image pi 
ON p.id = pi.product_id 
WHERE 
p.online = 1 

に参加これは、オンラインの製品テーブルにあることを前提としていもしあなたがそれをJOINに移す必要があるならば。

また、あなたは、ANSI 92を使用する必要がありますが、魅力を作品

+0

とにかく参加し、ANSI 92に精通していないイムは、JOINS参加したり、彼らはそれらの具体的な変動している私が使用しなければならないということです。 –

0

私はあなたが左外側は量テーブルに参加したいと思います...これは何でも記録を意味し、テーブルに参加の左側になりますなかれSは、あなたがあなたの内を変換したい

select ... 
    from product left outer join quantity 
      on product.id = quantity.product_id, 
      product_image 
    where 
      product.id = product_image.product_id