From 6d19a2fd2d5df890a10c6ed3a8d5d1242dcc4364 Mon Sep 17 00:00:00 2001 From: Tsubasa SEKIGUCHI Date: Fri, 14 Feb 2025 19:39:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E9=83=BD=E5=BA=81=E5=89=8D=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E3=82=B0=E3=83=AB=E3=83=BC=E3=83=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/3!stations.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/3!stations.csv b/data/3!stations.csv index 81e83201..badf8a57 100644 --- a/data/3!stations.csv +++ b/data/3!stations.csv @@ -7810,7 +7810,7 @@ station_cd,station_g_cd,station_name,station_name_k,station_name_r,station_name_ 9930126,9930126,国立競技場,コクリツキョウギジョウ,Kokuritsu-kyogijo,国立竞技场,고쿠리쓰쿄지조,25,,,,99301,13,160-0013,東京都新宿区霞ケ丘町10-3,139.714932,35.679831,0000-00-00,0000-00-00,0,9930126 9930127,1130207,代々木,ヨヨギ,Yoyogi,代代木,요요기,26,,,,99301,13,151-0053,東京都渋谷区代々木一丁目35-5,139.701666,35.683218,0000-00-00,0000-00-00,0,9930127 9930128,1130208,新宿,シンジュク,Shinjuku,新宿,신주쿠,27,,,,99301,13,151-0053,東京都渋谷区代々木二丁目1-1,139.698812,35.68869,0000-00-00,0000-00-00,0,9930128 -9930101,9930101,都庁前,トチョウマエ,Tochomae,都厅前,도초마에,28,,,,99301,13,160-0023,東京都新宿区西新宿2-8-1,139.69257,35.690551,0000-00-00,0000-00-00,0,9930129 +9930101,9930100,都庁前,トチョウマエ,Tochomae,都厅前,도초마에,28,,,,99301,13,160-0023,東京都新宿区西新宿2-8-1,139.69257,35.690551,0000-00-00,0000-00-00,0,9930129 9930129,9930129,西新宿五丁目,ニシシンジュクゴチョウメ,Nishi-shinjuku-gochome,西新宿五丁目,니시신주쿠고초메,29,,,,99301,13,160-0023,東京都新宿区西新宿5-25-9,139.684304,35.689798,0000-00-00,0000-00-00,0,9930129 9930130,2800220,中野坂上,ナカノサカウエ,Nakano-sakaue,中野坂上,나카노사카우에,30,,,,99301,13,164-0011,東京都中野区中央2-1-2,139.682279,35.69709,0000-00-00,0000-00-00,0,9930130 9930131,1131213,東中野,ヒガシナカノ,Higashi-nakano,东中野,히가시나카노,31,,,,99301,13,164-0003,東京都中野区東中野4丁目,139.682987,35.706891,0000-00-00,0000-00-00,0,9930131 From f63185894f770b9af1d5c24c3ee9ff5cfb512e61 Mon Sep 17 00:00:00 2001 From: Tsubasa SEKIGUCHI Date: Sun, 16 Feb 2025 23:19:30 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E5=85=A8=E3=81=A6=E3=81=AE=E7=A8=AE?= =?UTF-8?q?=E5=88=A5=E3=81=8C=E5=81=9C=E8=BB=8A=E3=81=97=E3=81=AA=E3=81=84?= =?UTF-8?q?=E9=A7=85=E3=82=92=E8=B7=AF=E7=B7=9A=E3=83=AA=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AB=E5=85=A5=E3=82=8C=E3=81=AA=E3=81=84&=E9=A7=85?= =?UTF-8?q?=E6=A4=9C=E7=B4=A2=E3=83=91=E3=83=95=E3=82=A9=E3=83=81=E3=83=A5?= =?UTF-8?q?=E3=83=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7de49b3c7564ce1935aa3d8f16feb48a59d9.json} | 4 +- ...1cc7faf9b87eca1900dbc72289fbe236da7f.json} | 4 +- ...251c2e9ff69770be5efc23d1ac478e831207.json} | 6 +- .../src/infrastructure/line_repository.rs | 9 +- .../src/infrastructure/station_repository.rs | 125 +++++++++--------- 5 files changed, 77 insertions(+), 71 deletions(-) rename .sqlx/{query-10a74f116191f0fe934bf01f5167d7f08f7f033349592a4f4c5519042a6b651e.json => query-4818e98b9f77fcbbf369d994b3107de49b3c7564ce1935aa3d8f16feb48a59d9.json} (95%) rename .sqlx/{query-ad6b672f0769aacad65f5f40347d1b27cebeed832df25f3ecf345497b505e36e.json => query-4bcd83955982f3a1f1ec0da24f181cc7faf9b87eca1900dbc72289fbe236da7f.json} (93%) rename .sqlx/{query-623a62584f0137b3863253052fa0d6ff5df3189d34abdad178c3a596deca0c4b.json => query-c455edc98c23e02fb335871e6a80251c2e9ff69770be5efc23d1ac478e831207.json} (80%) diff --git a/.sqlx/query-10a74f116191f0fe934bf01f5167d7f08f7f033349592a4f4c5519042a6b651e.json b/.sqlx/query-4818e98b9f77fcbbf369d994b3107de49b3c7564ce1935aa3d8f16feb48a59d9.json similarity index 95% rename from .sqlx/query-10a74f116191f0fe934bf01f5167d7f08f7f033349592a4f4c5519042a6b651e.json rename to .sqlx/query-4818e98b9f77fcbbf369d994b3107de49b3c7564ce1935aa3d8f16feb48a59d9.json index d4b8cadb..65aca1f2 100644 --- a/.sqlx/query-10a74f116191f0fe934bf01f5167d7f08f7f033349592a4f4c5519042a6b651e.json +++ b/.sqlx/query-4818e98b9f77fcbbf369d994b3107de49b3c7564ce1935aa3d8f16feb48a59d9.json @@ -1,6 +1,6 @@ { "db_name": "MySQL", - "query": "SELECT DISTINCT l.line_cd,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.e_status,\n l.e_sort,\n l.average_distance,\n s.station_cd,\n s.station_g_cd,\n sst.line_group_cd,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c\n FROM `lines` AS l\n JOIN `stations` AS s ON s.station_cd = ?\n JOIN `station_station_types` AS sst ON sst.station_cd = s.station_cd\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n WHERE l.line_cd = s.line_cd", + "query": "SELECT DISTINCT l.line_cd,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.e_status,\n l.e_sort,\n l.average_distance,\n s.station_cd,\n s.station_g_cd,\n sst.line_group_cd,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c\n FROM `lines` AS l\n JOIN `stations` AS s ON s.station_cd = ?\n JOIN `station_station_types` AS sst ON sst.station_cd = s.station_cd AND sst.pass <> 1\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n WHERE l.line_cd = s.line_cd", "describe": { "columns": [ { @@ -285,5 +285,5 @@ true ] }, - "hash": "10a74f116191f0fe934bf01f5167d7f08f7f033349592a4f4c5519042a6b651e" + "hash": "4818e98b9f77fcbbf369d994b3107de49b3c7564ce1935aa3d8f16feb48a59d9" } diff --git a/.sqlx/query-ad6b672f0769aacad65f5f40347d1b27cebeed832df25f3ecf345497b505e36e.json b/.sqlx/query-4bcd83955982f3a1f1ec0da24f181cc7faf9b87eca1900dbc72289fbe236da7f.json similarity index 93% rename from .sqlx/query-ad6b672f0769aacad65f5f40347d1b27cebeed832df25f3ecf345497b505e36e.json rename to .sqlx/query-4bcd83955982f3a1f1ec0da24f181cc7faf9b87eca1900dbc72289fbe236da7f.json index 2a211e46..4c097c77 100644 --- a/.sqlx/query-ad6b672f0769aacad65f5f40347d1b27cebeed832df25f3ecf345497b505e36e.json +++ b/.sqlx/query-4bcd83955982f3a1f1ec0da24f181cc7faf9b87eca1900dbc72289fbe236da7f.json @@ -1,6 +1,6 @@ { "db_name": "MySQL", - "query": "SELECT DISTINCT l.line_cd,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.e_status,\n l.e_sort,\n l.average_distance,\n s.station_cd,\n s.station_g_cd,\n sst.line_group_cd,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c\n FROM `lines` AS l\n JOIN `station_station_types` AS sst ON sst.line_group_cd = ?\n JOIN `stations` AS s ON s.station_cd = sst.station_cd\n AND s.e_status = 0\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n WHERE l.line_cd = s.line_cd\n AND l.e_status = 0\n GROUP BY l.line_cd", + "query": "SELECT DISTINCT l.line_cd,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.e_status,\n l.e_sort,\n l.average_distance,\n s.station_cd,\n s.station_g_cd,\n sst.line_group_cd,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c\n FROM `lines` AS l\n JOIN `station_station_types` AS sst ON sst.line_group_cd = ? AND sst.pass <> 1\n JOIN `stations` AS s ON s.station_cd = sst.station_cd\n AND s.e_status = 0\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n WHERE l.line_cd = s.line_cd\n AND l.e_status = 0\n GROUP BY l.line_cd", "describe": { "columns": [ { @@ -285,5 +285,5 @@ true ] }, - "hash": "ad6b672f0769aacad65f5f40347d1b27cebeed832df25f3ecf345497b505e36e" + "hash": "4bcd83955982f3a1f1ec0da24f181cc7faf9b87eca1900dbc72289fbe236da7f" } diff --git a/.sqlx/query-623a62584f0137b3863253052fa0d6ff5df3189d34abdad178c3a596deca0c4b.json b/.sqlx/query-c455edc98c23e02fb335871e6a80251c2e9ff69770be5efc23d1ac478e831207.json similarity index 80% rename from .sqlx/query-623a62584f0137b3863253052fa0d6ff5df3189d34abdad178c3a596deca0c4b.json rename to .sqlx/query-c455edc98c23e02fb335871e6a80251c2e9ff69770be5efc23d1ac478e831207.json index e0f1a76d..c3a398b8 100644 --- a/.sqlx/query-623a62584f0137b3863253052fa0d6ff5df3189d34abdad178c3a596deca0c4b.json +++ b/.sqlx/query-c455edc98c23e02fb335871e6a80251c2e9ff69770be5efc23d1ac478e831207.json @@ -1,6 +1,6 @@ { "db_name": "MySQL", - "query": "SELECT s.*,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.average_distance,\n dst_sst.id AS sst_id,\n dst_sst.type_cd,\n dst_sst.line_group_cd,\n dst_sst.pass,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c,\n IFNULL(s.station_cd = dst_sst.station_cd, 0) AS has_train_types,\n t.id AS type_id,\n t.type_name,\n t.type_name_k,\n t.type_name_r,\n t.type_name_zh,\n t.type_name_ko,\n t.color,\n t.direction,\n t.kind\n FROM `stations` AS s\n JOIN `lines` AS l ON l.line_cd = s.line_cd AND l.e_status = 0\n LEFT JOIN `station_station_types` AS from_sst\n ON from_sst.station_cd IN (SELECT station_cd FROM stations WHERE station_g_cd = ? AND e_status = 0)\n AND from_sst.pass <> 1\n LEFT JOIN `station_station_types` AS dst_sst\n ON dst_sst.station_cd = s.station_cd\n AND dst_sst.pass <> 1\n LEFT JOIN `types` AS t ON t.type_cd = dst_sst.type_cd\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n WHERE\n (\n s.station_name LIKE ?\n OR s.station_name_r LIKE ?\n OR s.station_name_k LIKE ?\n OR s.station_name_zh LIKE ?\n OR s.station_name_ko LIKE ?\n )\n AND s.e_status = 0\n AND (\n \tfrom_sst.line_group_cd = dst_sst.line_group_cd\n \tOR s.line_cd IN (SELECT line_cd FROM stations WHERE station_g_cd = IFNULL(?, s.station_g_cd) AND e_status = 0)\n )\n GROUP BY s.station_g_cd\n LIMIT\n ?", + "query": "WITH from_stations AS (\n SELECT s.station_cd,\n s.line_cd\n FROM stations AS s\n WHERE s.station_g_cd = ?\n AND s.e_status = 0\n )\n SELECT s.*,\n l.company_cd,\n l.line_type,\n l.line_symbol_primary,\n l.line_symbol_secondary,\n l.line_symbol_extra,\n l.line_symbol_primary_color,\n l.line_symbol_secondary_color,\n l.line_symbol_extra_color,\n l.line_symbol_primary_shape,\n l.line_symbol_secondary_shape,\n l.line_symbol_extra_shape,\n l.average_distance,\n dst_sst.id AS sst_id,\n dst_sst.type_cd,\n dst_sst.line_group_cd,\n dst_sst.pass,\n COALESCE(a.line_name, l.line_name) AS line_name,\n COALESCE(a.line_name_k, l.line_name_k) AS line_name_k,\n COALESCE(a.line_name_h, l.line_name_h) AS line_name_h,\n COALESCE(a.line_name_r, l.line_name_r) AS line_name_r,\n COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh,\n COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko,\n COALESCE(a.line_color_c, l.line_color_c) AS line_color_c,\n IFNULL(s.station_cd = dst_sst.station_cd, 0) AS has_train_types,\n t.id AS type_id,\n t.type_name,\n t.type_name_k,\n t.type_name_r,\n t.type_name_zh,\n t.type_name_ko,\n t.color,\n t.direction,\n t.kind\n FROM `stations` AS s\n LEFT JOIN from_stations AS fs ON fs.station_cd IS NOT NULL\n LEFT JOIN `station_station_types` AS from_sst ON from_sst.station_cd = fs.station_cd\n LEFT JOIN `station_station_types` AS dst_sst ON dst_sst.station_cd = s.station_cd\n LEFT JOIN `types` AS t ON t.type_cd = dst_sst.type_cd\n LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd\n LEFT JOIN `aliases` AS a ON la.alias_cd = a.id\n JOIN `lines` AS l ON l.line_cd = s.line_cd\n AND l.e_status = 0\n WHERE (\n s.station_name LIKE ?\n OR s.station_name_r LIKE ?\n OR s.station_name_k LIKE ?\n OR s.station_name_zh LIKE ?\n OR s.station_name_ko LIKE ?\n )\n AND s.e_status = 0\n AND IF(\n from_sst.id IS NOT NULL\n AND dst_sst.id IS NOT NULL,\n from_sst.line_group_cd = dst_sst.line_group_cd\n AND dst_sst.pass <> 1,\n s.line_cd = IFNULL(fs.line_cd, s.line_cd)\n )\n GROUP BY s.station_g_cd\n LIMIT ?", "describe": { "columns": [ { @@ -545,7 +545,7 @@ } ], "parameters": { - "Right": 8 + "Right": 7 }, "nullable": [ false, @@ -604,5 +604,5 @@ true ] }, - "hash": "623a62584f0137b3863253052fa0d6ff5df3189d34abdad178c3a596deca0c4b" + "hash": "c455edc98c23e02fb335871e6a80251c2e9ff69770be5efc23d1ac478e831207" } diff --git a/stationapi/src/infrastructure/line_repository.rs b/stationapi/src/infrastructure/line_repository.rs index ed273834..c358f037 100644 --- a/stationapi/src/infrastructure/line_repository.rs +++ b/stationapi/src/infrastructure/line_repository.rs @@ -194,7 +194,7 @@ impl InternalLineRepository { COALESCE(a.line_color_c, l.line_color_c) AS line_color_c FROM `lines` AS l JOIN `stations` AS s ON s.station_cd = ? - JOIN `station_station_types` AS sst ON sst.station_cd = s.station_cd + JOIN `station_station_types` AS sst ON sst.station_cd = s.station_cd AND sst.pass <> 1 LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd LEFT JOIN `aliases` AS a ON la.alias_cd = a.id WHERE l.line_cd = s.line_cd", @@ -310,6 +310,7 @@ impl InternalLineRepository { LEFT JOIN `aliases` AS a ON la.alias_cd = a.id WHERE l.line_cd = s.line_cd AND l.e_status = 0 + AND IF(sst.line_group_cd IS NOT NULL, sst.pass <> 1, 1) GROUP BY s.station_cd", params ); @@ -357,7 +358,7 @@ impl InternalLineRepository { COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko, COALESCE(a.line_color_c, l.line_color_c) AS line_color_c FROM `lines` AS l - JOIN `station_station_types` AS sst ON sst.line_group_cd = ? + JOIN `station_station_types` AS sst ON sst.line_group_cd = ? AND sst.pass <> 1 JOIN `stations` AS s ON s.station_cd = sst.station_cd AND s.e_status = 0 LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd @@ -396,7 +397,7 @@ impl InternalLineRepository { s.station_cd, s.station_g_cd FROM `lines` AS l - JOIN `station_station_types` AS sst ON sst.line_group_cd IN ( {} ) + JOIN `station_station_types` AS sst ON sst.line_group_cd IN ( {} ) AND sst.pass <> 1 JOIN `stations` AS s ON s.station_cd = sst.station_cd AND s.e_status = 0 LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd LEFT JOIN `aliases` AS a ON la.alias_cd = a.id @@ -440,7 +441,7 @@ impl InternalLineRepository { s.station_cd, s.station_g_cd FROM `lines` AS l - JOIN `station_station_types` AS sst ON sst.line_group_cd IN ( {} ) + JOIN `station_station_types` AS sst ON sst.line_group_cd IN ( {} ) AND sst.pass <> 1 JOIN `stations` AS s ON s.station_cd = sst.station_cd AND s.e_status = 0 AND s.line_cd = l.line_cd LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd LEFT JOIN `aliases` AS a ON la.alias_cd = a.id diff --git a/stationapi/src/infrastructure/station_repository.rs b/stationapi/src/infrastructure/station_repository.rs index 60b6a099..4b464cb3 100644 --- a/stationapi/src/infrastructure/station_repository.rs +++ b/stationapi/src/infrastructure/station_repository.rs @@ -842,74 +842,79 @@ impl InternalStationRepository { let rows: Vec = sqlx::query_as!( StationRow, - "SELECT s.*, - l.company_cd, - l.line_type, - l.line_symbol_primary, - l.line_symbol_secondary, - l.line_symbol_extra, - l.line_symbol_primary_color, - l.line_symbol_secondary_color, - l.line_symbol_extra_color, - l.line_symbol_primary_shape, - l.line_symbol_secondary_shape, - l.line_symbol_extra_shape, - l.average_distance, - dst_sst.id AS sst_id, - dst_sst.type_cd, - dst_sst.line_group_cd, - dst_sst.pass, - COALESCE(a.line_name, l.line_name) AS line_name, - COALESCE(a.line_name_k, l.line_name_k) AS line_name_k, - COALESCE(a.line_name_h, l.line_name_h) AS line_name_h, - COALESCE(a.line_name_r, l.line_name_r) AS line_name_r, - COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh, - COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko, - COALESCE(a.line_color_c, l.line_color_c) AS line_color_c, - IFNULL(s.station_cd = dst_sst.station_cd, 0) AS has_train_types, - t.id AS type_id, - t.type_name, - t.type_name_k, - t.type_name_r, - t.type_name_zh, - t.type_name_ko, - t.color, - t.direction, - t.kind + "WITH from_stations AS ( + SELECT s.station_cd, + s.line_cd + FROM stations AS s + WHERE s.station_g_cd = ? + AND s.e_status = 0 + ) + SELECT s.*, + l.company_cd, + l.line_type, + l.line_symbol_primary, + l.line_symbol_secondary, + l.line_symbol_extra, + l.line_symbol_primary_color, + l.line_symbol_secondary_color, + l.line_symbol_extra_color, + l.line_symbol_primary_shape, + l.line_symbol_secondary_shape, + l.line_symbol_extra_shape, + l.average_distance, + dst_sst.id AS sst_id, + dst_sst.type_cd, + dst_sst.line_group_cd, + dst_sst.pass, + COALESCE(a.line_name, l.line_name) AS line_name, + COALESCE(a.line_name_k, l.line_name_k) AS line_name_k, + COALESCE(a.line_name_h, l.line_name_h) AS line_name_h, + COALESCE(a.line_name_r, l.line_name_r) AS line_name_r, + COALESCE(a.line_name_zh, l.line_name_zh) AS line_name_zh, + COALESCE(a.line_name_ko, l.line_name_ko) AS line_name_ko, + COALESCE(a.line_color_c, l.line_color_c) AS line_color_c, + IFNULL(s.station_cd = dst_sst.station_cd, 0) AS has_train_types, + t.id AS type_id, + t.type_name, + t.type_name_k, + t.type_name_r, + t.type_name_zh, + t.type_name_ko, + t.color, + t.direction, + t.kind FROM `stations` AS s - JOIN `lines` AS l ON l.line_cd = s.line_cd AND l.e_status = 0 - LEFT JOIN `station_station_types` AS from_sst - ON from_sst.station_cd IN (SELECT station_cd FROM stations WHERE station_g_cd = ? AND e_status = 0) - AND from_sst.pass <> 1 - LEFT JOIN `station_station_types` AS dst_sst - ON dst_sst.station_cd = s.station_cd - AND dst_sst.pass <> 1 - LEFT JOIN `types` AS t ON t.type_cd = dst_sst.type_cd - LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd - LEFT JOIN `aliases` AS a ON la.alias_cd = a.id - WHERE - ( - s.station_name LIKE ? - OR s.station_name_r LIKE ? - OR s.station_name_k LIKE ? - OR s.station_name_zh LIKE ? - OR s.station_name_ko LIKE ? - ) - AND s.e_status = 0 - AND ( - from_sst.line_group_cd = dst_sst.line_group_cd - OR s.line_cd IN (SELECT line_cd FROM stations WHERE station_g_cd = IFNULL(?, s.station_g_cd) AND e_status = 0) - ) + LEFT JOIN from_stations AS fs ON fs.station_cd IS NOT NULL + LEFT JOIN `station_station_types` AS from_sst ON from_sst.station_cd = fs.station_cd + LEFT JOIN `station_station_types` AS dst_sst ON dst_sst.station_cd = s.station_cd + LEFT JOIN `types` AS t ON t.type_cd = dst_sst.type_cd + LEFT JOIN `line_aliases` AS la ON la.station_cd = s.station_cd + LEFT JOIN `aliases` AS a ON la.alias_cd = a.id + JOIN `lines` AS l ON l.line_cd = s.line_cd + AND l.e_status = 0 + WHERE ( + s.station_name LIKE ? + OR s.station_name_r LIKE ? + OR s.station_name_k LIKE ? + OR s.station_name_zh LIKE ? + OR s.station_name_ko LIKE ? + ) + AND s.e_status = 0 + AND IF( + from_sst.id IS NOT NULL + AND dst_sst.id IS NOT NULL, + from_sst.line_group_cd = dst_sst.line_group_cd + AND dst_sst.pass <> 1, + s.line_cd = IFNULL(fs.line_cd, s.line_cd) + ) GROUP BY s.station_g_cd - LIMIT - ?", + LIMIT ?", from_station_group_id, &station_name, &station_name, &station_name, &station_name, &station_name, - from_station_group_id, limit.unwrap_or(1) ) .fetch_all(conn)