4

PHP と MySQL でソーシャル メディア ニュース集約 Web アプリを構築しています。さまざまな URL (列 url) を特定の傾向 (列 trend_id) にマップする必要があります。これが私のダミーデータ構造です:

サンプルデータ

特定の trend_id (たとえば 12) の URL を取得するクエリを作成する必要があります。これは簡単です:

SELECT urlFROM url_tableWHERE trend_id= '12'

現在、一部のトレンドは特定の親トレンドに関連しています。たとえば、trend_id 12、16、および 45 は、親の trend_id 12 に関連付けられています。したがって、ここに私のクエリを示します。

SELECT '12' as parent_trend_id, urlFROM url_tableWHERE ( trend_id= '12' OR trend_id= '16' OR trend_id= '45')

同様のクエリの別の例を次に示します。

SELECT '345' as parent_trend_id, urlFROM url_tableWHERE ( trend_id= '345' OR trend_id= '457' OR trend_id= '16')

問題は、トレンド間にこのような親子関係が複数存在することです。今のところ、PHP 内で for ループを実行し、複数のクエリを実行しています。また、私のアプリの性質上、親トレンドをこの表に含めることはできません。複数のそのようなクエリをクラブする単一のクエリを持つ方法はありますか?

編集:

関係を定義する別のテーブルがあります。これは、ID、trend_id (親) および related_trend_id (子) を持つ単純な 3 列のテーブルです。ただし、1 つの related_trend_id (子) が複数の trend_id (親) を持つことができます。リレーション テーブルのスナップショットを次に示します。

リレーション テーブルのサンプル データ

4

2 に答える 2

2

特定のクエリは次のようになります。

SELECT r.trend_id as parent_trend_id,url 
FROM url_table
Join relations r on r.related_trend_id = childid
WHERE r.trend_id = 12

またはそれらすべてを取得するには

SELECT r.trend_id as parent_trend_id,url 
FROM url_table
Join relations r on r.related_trend_id = childid

私にとって期待どおりに動作します:

http://sqlfiddle.com/#!3/b137a/9

どのような結果を期待していましたか?

于 2012-07-27T19:30:31.867 に答える
0

親子関係を含むテーブルに結合しますか?

SELECT url_table.*
FROM url_table
INNER JOIN parents
    ON url_table.trend_id = parents.trend_id
WHERE parents.parent_id IN (1,2,3);

(1,2,3)タプルを抽出するすべての親トレンドです。

于 2012-07-27T19:34:52.740 に答える