0

私はいくつかの(MySQL)テーブルを持っています。興味深いのはCampaignRegion、外部キーをaに格納し、Campaign1つの外部キーを、、、、、またはのいずれかに格納CityするCountyことです。場所固有の外部キーセットは常に1つだけで、他はです。DistrictStateCountryNULL

テーブルは次のCampaignRegionようになります。

mysql> describe CampaignRegion;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| id          | int(11) | NO   | PRI | NULL    | auto_increment |
| campaign_id | int(11) | YES  | MUL | NULL    |                |
| country_id  | int(11) | YES  | MUL | NULL    |                |
| state_id    | int(11) | YES  | MUL | NULL    |                |
| district_id | int(11) | YES  | MUL | NULL    |                |
| county_id   | int(11) | YES  | MUL | NULL    |                |
| city_id     | int(11) | YES  | MUL | NULL    |                |
+-------------+---------+------+-----+---------+----------------+

を選択するためのクエリが必要Campaignです。私はを持っており、それ自体、または、または、またはのいずれかに一致Cityするを取得する必要があります。CampaignsCityCountyDistrictStateCountryCity

これは実際には非常に簡単で、私は次のようなものを思いつきました。

SELECT count(id) as campaign_count, campaign_id
  FROM CampaignRegion
 WHERE (city_id = 32076 OR district_id = 127 OR state_id = 7 OR country_id = 156)
 GROUP BY campaign_id
HAVING campaign_count > 0;

ただし、最初にCampaigns一致するソート済みの結果セット、次に一致するもの、次に一致するものなど(クエリ内のの順序など)を取得したいのですが、これを行う簡単な方法はありますか?またはのこのクエリに基づいて(最初の一致)をどうしますか?どう思いますか?CityCountyDistrictORSELECTCampaignJOINSUBSELECT

ご協力ありがとうございました。

4

1 に答える 1

1

これがあなたが探しているものだと思います:

SELECT count(id) as campaign_count, campaign_id
FROM CampaignRegion
WHERE (city_id = 32076 OR district_id = 127 OR state_id = 7 OR country_id = 156)
GROUP BY campaign_id
HAVING campaign_count > 0;
ORDER BY (city_id = 32076) DESC, (country_id = 156) DESC, (state_id = 7) DESC, (district_id = 127) DESC;
于 2012-08-06T09:37:40.557 に答える