1

データベースに 2 つのテーブルがあります。

  • エントリ (ID、距離、ステータス[、...])
  • エントリーメタ (ID、entry_ID、メタキー、メタ値)

今まで、次のようなエントリを選択しました。

SELECT ID,
distance
FROM entries
WHERE status = '2' HAVING distance < 30
ORDER BY distance
LIMIT 20

2 番目のテーブルには、次のようなデータが含まれています。

ID | entry_ID | metakey | metavalue
1  | 137      | service | 13
2  | 137      | service | 7
3  | 137      | service | 76
4  | 84       | service | 23
etc.

最初のテーブルのエントリはレストランで、2 番目のテーブルのサービスは提供するサービスです。私がしばらくの間試みていたのはこれです: ユーザーがチェックボックスで特定のサービスを選択できるようにする HTML 検索フォームを作成します。MYSQL クエリは、これらすべてのサービスを提供するすべてのエントリを選択する必要があります。これまでのところ、検索フォームは選択したサービスを配列 (7,13,9,27) に入れています。

私の問題は、正しいデータベース クエリを見つけることです。メタ値フィールドをチェックボックス配列と一致させてから、最初のテーブルからすべてのエントリを選択して、これらすべてのサービスを提供する必要があります。「LEFT JOIN ON entries.ID = entriesmeta.entry_ID」といくつかの WHERE 句を試しましたが、成功しませんでした。誰か助けてくれませんか。

よろしくお願いします - そして私の下手な英語でごめんなさい。

4

2 に答える 2

5
SELECT  e.ID
FROM    entries e
        INNER JOIN entriesmeta m
            ON e.ID = m.entry_id
WHERE   
        m.metakey = 'service' AND
        m.metavalue IN (7,13,9,27)
GROUP   BY e.ID
HAVING  COUNT(DISTINCT m.metavalue) = 4

このクエリは、とIDを持つすべてのものを表示します。metakeyservice7, 13, 9, 27

于 2013-09-23T21:31:12.400 に答える
2

entriesこれにより、特定のサービス値を持つすべてのものを取得できますentriesmeta-それがあなたが求めていると思います。

 SELECT entries.* from entriesmeta
 INNER JOIN entries on entries.ID = entriesmeta.entry_ID
 WHERE entriesmeta.metavalue = <myValue>
于 2013-09-23T21:30:37.900 に答える