2

INステートメントで演算子を使用する場合、データベースの列名にカンマ区切りのリストが含まれている場合 (いずれかまたは両方の列)SELECTに使用する適切な構文は何ですか?subquery

以下のスニペットでは、顧客の好みの色で入手可能な製品を特定しようとしています (いずれかの列に 1 つ以上の値が存在する可能性があります)。

SELECT * FROM products WHERE products.Colors IN (SELECT style.colors_love FROM style WHERE user_id = $user_id)

この形式は、ハードコードされたリストで機能します。

$colors_love = "'Black','Royal_Blue','Dodger_Blue','Red'";
SELECT * FROM products WHERE products.Color IN ('$colors_love') 

として宣言し、値を連結しようとするなど、考えられるすべてのことを試しましたがarray、コーディングが少し錆びているため、構文が少しずれているように感じます。

4

1 に答える 1

2
SELECT p.* 
  FROM products p
  JOIN customers c 
    ON c.Colors_Prefer = p.colors 
 WHERE c.user_id = $user_id;

好ましい色の例を考えると、正規化されたアプローチは次のようになります。

user preferred_colour 
bob  red
bob  yellow
mike red
mike green
dave turquoise

この方法で何百もの属性を保存したい場合は、EAV アプローチが適している可能性があります。

user attribute value
bob  colour    red
bob  colour    yellow
mike colour    red
mike colour    green
dave colour    turquoise
dave vehicle   bicycle
dave vehicle   car
bob  vehicle   train

しかし、このようにすると、データ型ごとに異なるテーブルを作成したくなるので、少なくとも数値型属性用のテーブルと文字列型属性用のテーブルを作成します。

于 2014-09-14T00:30:20.417 に答える