3

現在、データベース内の 3 つのテーブルから情報を取得する MySQL クエリに取り組んでいcategory category_industryますindustry。これらは ID に基づいて関連付けられています。

category            category_industry        industry
------------------  ------------------       ------------------
ID | Title          c_id | i_id              ID | Title
 1 | Fab Floor         1 |    1               1 | Beef
                       1 |    2               2 | Pork

このcategory_industryテーブルには、カテゴリが属する業界が、カテゴリの ID と業界ごとに一覧表示されます。私がやっていることは、各業界の ID を取得し、industryテーブルからその業界のタイトルを取得することです。GROUP_CONCATタイトルをまとめるためにステートメントを使用します。クエリで検索を実行しないと、結果は次のようになります。

Fabrication Floor
(Beef, Pork)

ただし、検索を行って、タイトルの 1 つが検索で一致した場合、すべてのタイトルではなく、そのタイトルのみが表示されます。「牛肉」を検索している場合のクエリは次のとおりです。

SELECT *,
    GROUP_CONCAT(i.industry_title ORDER BY i.industry_title ASC SEPARATOR ', ') AS industries,
    MATCH (c.category_title, c.category_details) AGAINST ('Beef*' IN BOOLEAN MODE) AS cscore,
    MATCH (i.industry_title) AGAINST ('Beef*' IN BOOLEAN MODE) AS iscore,
    c.category_id AS cat_id
FROM category c
LEFT JOIN category_industry t  ON t.category_id = c.category_id
LEFT JOIN industry i ON i.industry_id = t.industry_id
WHERE
    MATCH (c.category_title, c.category_details) AGAINST ('Beef*' IN BOOLEAN MODE)
    OR MATCH (i.industry_title) AGAINST ('Beef*' IN BOOLEAN MODE)
    GROUP BY c.category_id
    ORDER BY (cscore + iscore) DESC, c.added_date ASC

このクエリは、次の結果を提供します。

Fabrication Floor
(Beef)

業界内のすべてのカテゴリが表示されますが、Beef他のすべての業界はリストから削除されます。他の業界も見せてほしいです。

誰かが私の問題の解決策を知っていますか? ステートメントをさまざまな方法で書き直そうとしましたが、リストを完全な状態に保つことができないようです。前もって感謝します。

4

0 に答える 0