2

MySQLとリレーショナルデータベースに関しては、私はかなり初心者ですが、私が取り組んでいるプロジェクトでは、いくつかの複雑なSELECTステートメントを作成する必要があり、この時点で少し混乱しています。さまざまな製品に関する情報を格納する3つのテーブルがあります。Table1は各製品のページコンテンツを格納し、table2は各製品に関する特定の基準(モデル、素材、色など)を格納し、table3はT1とT2の間に多対多の関係を確立するためのリンクテーブルです。

これは私のselectステートメントが私に与えているものです:

Array
(
    [name] => color
    [value] => Red
    [title] => Product 1
)
Array
(
    [name] => material
    [value] => Wood
    [title] => Product 1
)

たとえば、「赤」と「木」の両方の製品を選択する方法について混乱しています。基本的に、各製品とその説明の記録があります。

Array
(
    [material] => Wood
    [color] => Red
    [title] => Product 1
)

SELECTステートメント:

SELECT table2.name, table3.value, table1.title
FROM table2

INNER JOIN table3
ON table2.id=table3.varid

INNER JOIN table1
ON table1.id=table3.contentid
4

1 に答える 1

1

他のテーブルに再度参加する必要があります。テーブルを区別するには、テーブルに別名を付ける必要があります。

SELECT table2.name, table3.value, table1.title, t3.value, t1.title
FROM table2
JOIN table3 ON table2.id=table3.varid and value = 'Wood'
JOIN table1 ON table1.id=table3.contentid
JOIN table3 t3 ON table2.id=t3.varid and value = 'Red'
JOIN table1 t1 ON t1.id=t3.contentid;

値のテストをWHERE句に入れることもできますが、後で結合結果全体に対してではなく、結合が行われるときに述語が実行されるため、この方法の方が効率的です。

INNER JOINJOINは意味が同じであることに注意してください(INNERは暗示されています) 。

于 2012-07-26T19:12:17.123 に答える