簡體   English   中英

根據左聯接中的列值計算行數

[英]Count number of rows based on a column value from a left join

對於一個網站(旅行社),我正在努力提高性能。 目前,我正在優化搜索模塊。 除其他外,我想優化保存目標的選擇框。 在系統中,有幾個目的地,但並非所有目的地都有可預訂的住宿。 因此,我想獲得至少有1個住宿地點的目的地清單。 Destinations表(表名:geodata)具有4種類型:Country,Area,Region和City。 由於(某種*)不正確的開發,容納表包含4個外鍵(fk_country,fk_area,fk_region和fk_city)。 *由於增長和每次開發功能時的需求。

我已經嘗試過以下基於IF語句的左連接。 但是此查詢僅完成一半的工作。 我最感興趣的是特定國家,地區,地區或城市的住宿數量。 目前,我只獲得住宿總數。 如何調整此查詢以正確獲取給定位置類型的住宿數量。

我的查詢:

SELECT      geodata.id, 
            geodata.type,
            COUNT(accommodation.id) AS count_accommodations
FROM        geodata
LEFT JOIN   accommodation
ON          IF(geodata.type = 'Country', accommodation.fk_country,
                IF(geodata.type = 'Area', accommodation.fk_area,
                    IF(geodata.type = 'Region', accommodation.fk_region, accommodation.fk_city)
                )
            )
GROUP BY    geodata.id
HAVING      count_accommodations > 0

電流輸出:

|id|type   |count_accommodations|
---------------------------------
| 1|Country|                   2|
| 2|Area   |                   2|
| 3|Area   |                   2|

預期產量

|id|type   |count_accommodations|
---------------------------------
| 1|Country|                   2|
| 2|Area   |                   1|
| 3|Area   |                   1|

任何幫助是極大的贊賞。

它不起作用,因為您沒有加入條件。 您要做的是,評估一個外鍵(fk_country,fk_area等),但是您不會在任何地方使用它。

...
left join accommodation
on (... fk_...) = geodata.???
group by geodata.id
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM