0

ID の配列を単一のデータベース フィールド (1,5,48) に格納する最初の簡単な修正はおそらく最善ではないと結論付けましたが、それらを「親アイテム ID」(単数) の結合テーブルに分割すると、次に、別のテーブルにリンクするサブ関連アイテムID(複数)の方がよいでしょう。

しかし、一致を取得するためにどの mysql クエリを使用すればよいかわかりません。

そのため、「related_item」配列が「1,5,8」で、私の「parent_items」の 1 つが結合テーブルに「1」と「8」の関連項目一致がある検索フォームが送信されます。

では、どの mysql クエリがこれらの一致を返すのでしょうか?

アップデート:

  • サンプルレコードとして、おそらくHSBCとTOPSHOPの「会社」テーブルが1つあります。
  • 「産業」、おそらく「銀行」と「小売」の別の表があります。
  • company_id と industry_id を組み合わせた結合テーブルがあります。

したがって、誰かが業界 = 'banking' または 'retail' の検索フォームを送信した場合、'topshop' および 'hsbc' の企業レコードを返すにはどうすればよいでしょうか?

4

1 に答える 1

1

このようなもの...あなたが子供や親を「検索」しているのかどうか、私にはわかりません。私はあなたが子供を検索することを意味すると思います:

-- SEARCH CHILDREN --
SELECT p.*, c.* FROM child_table c
LEFT JOIN linking_table l ON (p.id = l.child_table_id)
LEFT JOIN parent_table p ON (l.parent_item_id = p.id)
WHERE c.id IN (1,5,4,8)
-- OPTIONAL AND CLAUSE for p.id = ? --

親を検索する場合は、順序をやり直すことができますが、のp.id代わりにWHERE IN句がオンになることを除いて、まったく同じクエリを使用できますc.id

ただし、これにより、子の一致ごとに1行が取得されるため、同じ親が複数回存在することに注意してください。実際の子データが必要ない場合は、DISTINCT1つのインスタンスのみを返すために使用できます。

于 2012-04-30T01:15:47.070 に答える