Преглед на файлове

提交优化后的按摩商品查询代码

wangzhijun преди 1 ден
родител
ревизия
5d77f8b613
променени са 1 файла, в които са добавени 24 реда и са изтрити 31 реда
  1. 24 31
      nightFragrance-massage/src/main/resources/mapper/massage/TXiangmuMapper.xml

+ 24 - 31
nightFragrance-massage/src/main/resources/mapper/massage/TXiangmuMapper.xml

@@ -75,52 +75,45 @@
             p.c_title AS title,
             p.project_type AS productType,
             p.d_price AS price,
-
             '广誉源' AS merchantName,
             CAST(FLOOR(100000 + RAND() * 900000) AS UNSIGNED) AS merchantId,
-
-
             CASE
-
                 WHEN #{dto.areaCode} IS NOT NULL THEN (SELECT name FROM area WHERE code = #{dto.areaCode})
-
-
-                ELSE (
-                    SELECT GROUP_CONCAT(DISTINCT a.name SEPARATOR ',')
-                    FROM t_js j_inner
-                             JOIN area a ON FIND_IN_SET(a.code, j_inner.service_area_codes) > 0
-                    WHERE j_inner.is_delete = 0
-                      AND j_inner.n_tong = 1
-                      AND CONCAT(',', j_inner.c_bh_list, ',') LIKE CONCAT('%,', p.c_id, ',%')
-                )
+                ELSE agg.area_names
                 END AS serviceAreaName,
-
-            #{dto.areaCode} AS serviceAreaCode
-
-        FROM
-            t_xiangmu p
-
+            CASE
+                WHEN #{dto.areaCode} IS NOT NULL THEN #{dto.areaCode}
+                ELSE agg.area_codes
+                END AS serviceAreaCode
+        FROM t_xiangmu p
+                 INNER JOIN (
+            SELECT
+                j_inner.c_bh_list,
+                GROUP_CONCAT(DISTINCT a.code SEPARATOR ',') AS area_codes,  -- code拼接
+                GROUP_CONCAT(DISTINCT a.name SEPARATOR ',') AS area_names  -- 名称拼接
+            FROM t_js j_inner
+                     JOIN area a ON FIND_IN_SET(a.code, j_inner.service_area_codes)
+            WHERE j_inner.is_delete = 0
+              AND j_inner.n_tong = 1
+            GROUP BY j_inner.c_bh_list
+        ) agg ON FIND_IN_SET(p.c_id, agg.c_bh_list)
         WHERE
             p.is_delete = 0
-          AND p.project_type = '1'
-
+            <if test="dto.productType != null">
+                AND p.project_type = #{dto.productType}
+            </if>
           AND EXISTS (
             SELECT 1
             FROM t_js j
             WHERE j.is_delete = 0
               AND j.n_tong = 1
-              AND (
-                FIND_IN_SET(#{dto.areaCode}, j.service_area_codes) > 0
-                    OR
-                #{dto.areaCode} IS NULL
-                )
-              AND CONCAT(',', j.c_bh_list, ',') LIKE CONCAT('%,', p.c_id, ',%')
+              AND (#{dto.areaCode} IS NULL OR FIND_IN_SET(#{dto.areaCode}, j.service_area_codes))
+              AND FIND_IN_SET(p.c_id, j.c_bh_list)
         )
-
         GROUP BY
-            p.c_id
+            p.c_id, p.c_title, p.project_type, p.d_price, #{dto.areaCode}, agg.area_codes, agg.area_names
         ORDER BY
-            MAX(p.create_time) DESC
+            p.create_time DESC
     </select>
 
 </mapper>