0

こんにちは、私は多対多の関係を持つテーブルビジネスをしています。最初にグループ連結を実行して多くのテーブルからアイデアを取得し、次にこれらの ID を見て多くのテーブルから値を取得することが提案されました

以下の例では、「アナウンスメント」として GROUP_CONCAT(DISTINCT ba.announcement_id) を介してアナウンス ID のリストを取得していることがわかります。ここからどのように設定しますか

SELECT * from notifications where id IN( _ _ _ _ _ )

in は group_concat から返されたものを表します

ID b

始める

/* Business Information and Categories */
SELECT 
    b.alias_title, b.title, b.premisis_name, 
    a.address_line_1, a.address_line_2, a.postal_code,tvc.town_village_city,spc.state_province_county, c.country,
    GROUP_CONCAT(DISTINCT be.event_id) as 'event',
    GROUP_CONCAT(DISTINCT ba.announcement_id) as 'announcement', 
    GROUP_CONCAT(DISTINCT bd.document_id) as 'document',
    GROUP_CONCAT(DISTINCT bi.image_id) as 'image',
    GROUP_CONCAT(DISTINCT bprod.product_id ) as 'product',
    GROUP_CONCAT(DISTINCT bt.tag_title_id) as 'tag'
    FROM business AS b
    INNER JOIN business_category bc_1 ON b.primary_category = bc_1.id
    INNER JOIN business_category bc_2 ON b.secondary_category = bc_2.id
    LEFT OUTER JOIN business_category bc_3 ON b.tertiary_category = bc_3.id
    INNER JOIN address a ON b.address_id = a.id
    LEFT OUTER JOIN town_village_city tvc ON a.town_village_city_id = tvc.id
    LEFT OUTER JOIN state_province_county spc ON a.state_province_county_id
    INNER JOIN country c ON a.country_id = c.id
    LEFT OUTER JOIN geolocation g ON b.geolocation_id = g.id
    LEFT OUTER JOIN business_event be ON b.id = be.event_id
    LEFT OUTER JOIN business_announcement ba ON b.id = ba.announcement_id
    LEFT OUTER JOIN business_document bd ON b.id = bd.business_id
    LEFT OUTER JOIN business_image bi ON b.id = bi.business_id
    LEFT JOIN business_property bp ON b.id= bp.business_id
    LEFT JOIN business_product bprod ON b.id= bprod.business_id 
    LEFT JOIN business_tag bt ON b.id = bt.business_id
    WHERE b.id= in_business_id;

    SELECT * from announcement 
    where 




END
4

1 に答える 1

0

最初の select ステートメントで、unounceId を変数に割り当て、それを使用して 2 番目のクエリですべてのアナウンスを取得できます。

set @announcementIds = '';
select ...........,
@announcementIds:= GROUP_CONCAT(DISTINCT announcement_id) as 'announcement',
...........;

Select * from announcement 
where announcement_id REGEXP REPLACE(@announcementIds,',','|');

いくつかのリンク:

于 2012-09-29T16:39:32.430 に答える