CodeIgniter, порядок по количеству строк в отдельной объединенной таблице? - PullRequest
2 голосов
/ 31 июля 2011

У меня есть 4 таблицы, которые связывают воедино ...

Во-первых, отели стол

  • hotel_id
  • town_id
  • hotel_name

Тогда населенных пунктов Таблица:

  • town_id
  • Region_ID
  • town_name

Тогда таблица регионов :

  • Region_ID
  • country_id
  • REGION_NAME

Наконец страны таблица

  • country_id
  • COUNTRY_NAME

Что мне нужно сделать, так это перечислить города в порядке количества отелей в этом городе.

Причина, по которой я включил таблицу регионов и таблицу стран, заключается в том, что при отображении этого города мне нужно отобразить страну, из которой он находится. Это можно получить только через таблицу регионов.

Поэтому, используя активные записи в CodeIgniter, я сделал это до сих пор:

$this->db->join('regions','towns.town_region_id = regions.region_id');
$this->db->join('countries','regions.region_country_id = countries.country_id');
$query = $this->db->get('towns');

foreach ($query->result() as $row) {
     echo "<li>";
     echo "$row->town_name, $row->country_name";
     echo "</li>";
}

Это выводит:

  • Лондон, Великобритания
  • Вашингтон, США
  • Нью-Йорк, США
  • Москва, Россия
  • и т. Д., И т. Д.

В каждом из этих городов есть отели. Все, что мне сейчас нужно, это заказать их по количеству отелей в каждом городе.

Любая помощь будет принята с благодарностью! Спасибо.

Ответы [ 2 ]

4 голосов
/ 31 июля 2011
$this->db->select('t.*,c.*,COUNT(h.hotel_id) AS nhotels');
$this->db->from('towns t');
$this->db->join('hotels h','h.town_id = t.town_id');
$this->db->join('regions r','t.town_region_id = r.region_id');
$this->db->join('countries c','r.region_country_id = c.country_id');
$this->db->group_by('t.town_id');
$this->db->order_by("nhotels",'DESC');
$query = $this->db->get();

, который выдаст следующий запрос:

SELECT `t`.*, `c`.*, COUNT(h.hotel_id) AS nhotels
FROM (`towns` t)
   JOIN `hotels` h
      ON `h`.`town_id` = `t`.`town_id`
   JOIN `regions` r
      ON `t`.`town_region_id` = `r`.`region_id`
   JOIN `countries` c
      ON `r`.`region_country_id` = `c`.`country_id`
GROUP BY `t`.`town_id`
ORDER BY `nhotels` DESC
0 голосов
/ 31 июля 2011
SELECT 
   hotels.town_id, 
   count(hotels.hotel_id) from hotels AS hotels_count,
   towns.town_name
FROM
    hotels,
LEFT JOIN
    towns ON hotels.town_id = towns.town_id
GROUP BY hotels.town_id
ORDER BY hotels_count DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...