0
SELECT *
                    FROM  products2tecspecs as p2t, products_tecspecs as pt 
                    WHERE p2t.fk_product_id = '%s' AND pt.pts_id = fk_tecspec_id AND pt.pts_id 
                    IN (5275, 21, 5276, 5277, 5278,  49, 5279)
                    ORDER BY FIELD(pts_id, 5275, 21, 5276, 5277, 5278,  49, 5279)

これを選択すると、特定の ID が見つかり、必要な順序で表示されます。しかし、私はこの関係に問題があります。foreach 関数で使用しており、7 つのループが必要です。問題はヌルじゃなくて、関連商品しか持ってこないこと。もちろん、それは問題ではありません。神に感謝しますが、私の場合、たとえば2つしかない場合、レイアウトが破壊されます。

次のようなことができる方法はありますか: フィールドが見つからない場合は、これを配置しますか?

リレーションを作成すると機能しますが、700 個の製品で行う必要があります...

私はこれを見つけましが、NULLの問題ではないようです...

私もLEFT JOINで試しましたが、私が言ったように、関係が存在しない場合、NULLをもたらすことはできません...

私は盲目です


私はこれを見つけましたSELECT pts_name FROM ( SELECT pts_name, CASE pts_id WHEN 5275 THEN 1 WHEN 21 THEN 2 WHEN 5276 THEN 3 WHEN 5277 THEN 4 WHEN 5278 THEN 5 WHEN 49 THEN 6 WHEN 5279 THEN 7 END AS sort_order FROM products_tecspecs WHERE pts_id IN ( 5275, 21, 5276, 5277, 5278, 49, 5279 ) )a ORDER BY a.sort_order ASC。それはSELECT I WANTをもたらしますが、それでも私の目標を達成する方法を見つけることができませんでした...


結合して
SELECT * FROM products2tecspecs AS p2t LEFT JOIN products_tecspecs AS pt ON ( p2t.fk_tecspec_id = pt.pts_id ) WHERE p2t.fk_product_id =34 AND pt.pts_id IN ( 5275, 21, 5276, 5277, 5278, 49, 5279 ) OR p2t.p2t_value IS NULL ORDER BY FIELD( pts_id, 5275, 21, 5276, 5277, 5278, 49, 5279 ) LIMIT 40


しかし、うまくいきませんでした。IN選択した分野を超えた結果をもたらしました。

4

1 に答える 1

0

これらのオプションの 1 つを WHERE 句に追加するだけで済みます (LEFT JOIN ソリューションを使用)。

    OR pt.pts_id IS NULL
    OR fk_tecspec_id IS NULL

?

于 2012-07-24T17:42:57.023 に答える