如何将这三个MYSQL查询合并为一个?

如何将这三个MYSQL查询合并为一个?,mysql,sql,join,Mysql,Sql,Join,我有一个疑问: SELECT da_clubs_categories.name AS cat_name, da_clubs_categories.id AS cat_id, da_deals.id, da_brands.id AS brand_id, da_brands.name AS brand_name FROM da_clubs_categories, da_deals, da_brands WHERE da_clubs_categories

我有一个疑问:

SELECT da_clubs_categories.name AS cat_name,
    da_clubs_categories.id AS cat_id,
    da_deals.id,
    da_brands.id AS brand_id,
    da_brands.name AS brand_name
    FROM da_clubs_categories, da_deals, da_brands
    WHERE da_clubs_categories.fk_club_id = da_brands.fk_club_id
    AND da_brands.fk_club_id = 6
    AND da_deals.fk_brand_id = da_brands.id
    AND FIND_IN_SET(da_clubs_categories.id, da_deals.categories) > 0
    AND da_brands.active = 1
    AND da_deals.active = 1
    AND da_deals.date_start <= CURRENT_DATE()
    AND CURRENT_DATE() <= da_deals.date_end
    ORDER BY da_clubs_categories.name ASC, da_deals.date_start DESC
稍后,另一个查询:

SELECT value AS 'like'
FROM da_logs
WHERE fk_deal_id = 22
AND type = 'deal_like'
SELECT value AS 'rating'
FROM da_logs
WHERE fk_deal_id = 22
AND type = 'deal_rating'
结果:

+------+
| like |
+------+
| ::1  |
+------+   
+------------------------------------------------------------+
| rating                                                     |
+------------------------------------------------------------+
| a:2:{s:7:"user_ip";s:3:"::1";s:12:"rating_value";s:1:"3";} |
+------------------------------------------------------------+
稍后,另一个查询:

SELECT value AS 'like'
FROM da_logs
WHERE fk_deal_id = 22
AND type = 'deal_like'
SELECT value AS 'rating'
FROM da_logs
WHERE fk_deal_id = 22
AND type = 'deal_rating'
结果:

+------+
| like |
+------+
| ::1  |
+------+   
+------------------------------------------------------------+
| rating                                                     |
+------------------------------------------------------------+
| a:2:{s:7:"user_ip";s:3:"::1";s:12:"rating_value";s:1:"3";} |
+------------------------------------------------------------+
我必须使用PHP中的循环来实现这一点,但我只想进行一个查询,特别是tableA,其中包含两个额外的列(我进行了两个额外的查询),正如您所看到的


如果找不到特定交易的like或rating,则将其设置为“”。

使用
LEFT JOIN
da_logs
表连接两次,每个
类型对应一次

SELECT da_clubs_categories.name AS cat_name,
    da_clubs_categories.id AS cat_id,
    da_deals.id,
    da_brands.id AS brand_id,
    da_brands.name AS brand_name,
    IFNULL(l1.value, '') AS like,
    IFNULL(l2.value, '') AS rating
    FROM da_clubs_categories
    INNER JOIN da_brands ON da_clubs_categories.fk_club_id = da_brands.fk_club_id
    INNER JOIN da_deals ON da_deals.fk_brand_id = da_brands.id
        AND FIND_IN_SET(da_clubs_categories.id, da_deals.categories) > 0
    LEFT JOIN da_logs AS l1 ON l1.fk_deal_id = da_deals.id AND l1.type = 'deal_like'
    LEFT JOIN da_logs AS l2 ON l2.fk_deal_id = da_deals.id AND l2.type = 'deal_rating'
    WHERE da_brands.fk_club_id = 6
    AND da_brands.active = 1
    AND da_deals.active = 1
    AND da_deals.date_start <= CURRENT_DATE()
    AND CURRENT_DATE() <= da_deals.date_end
    ORDER BY da_clubs_categories.name ASC, da_deals.date_start DESC
选择da_clubs_categories.name作为cat_名称,
da_clubs_categories.id作为cat_id,
da_.id,
da_brands.id作为brand_id,
da_brands.name作为品牌名称,
IFNULL(l1.value,'')如下所示,
IFNULL(l2.value“”)作为额定值
来自da_俱乐部类别
内部加入da_俱乐部类别上的da_品牌。fk_俱乐部id=da_品牌。fk_俱乐部id
da_deals.fk_brand_id=da_brands.id上的内部加入da_deals
并在_集中查找_(da_clubs_categories.id,da_deals.categories)>0
LEFT JOIN da_在l1.fk_deal_id=da_deals.id和l1.type='deal_like'上以l1的形式记录
LEFT JOIN da_以l2.fk_deal_id=da_deals.id和l2.type='deal_rating'上的l2登录
其中da_brands.fk_club_id=6
和da_brands.active=1
和dau deals.active=1

da_deals.date_start使用
LEFT JOIN
连接这些表。如果不匹配,
LEFT JOIN
将为列返回
NULL