ОШИБКА в GROUP_BY при получении запроса из двух баз данных CODEIGNITER - PullRequest
1 голос
/ 21 октября 2019

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

Это мой код:

public function search_results_accommodations($location,$from_date,$to_date,$bedroom,$guests)
{
    $this->db->select('*, akzapier.bookings.id as BOOKING_ID, akzapier.properties.id as PROPERTY_ID, ci_alexandrohomes.assigned_property.ID as ASSIGNED_PROPERTY_ID, ci_alexandrohomes.listings.ID as LISTING_ID');
    $this->db->from('akzapier.bookings');
    $this->db->join('akzapier.properties', 'akzapier.properties.id=akzapier.bookings.property_id', 'inner');
    $this->db->join('ci_alexandrohomes.assigned_property', 'ci_alexandrohomes.assigned_property.property_id=akzapier.properties.id', 'inner');
    $this->db->join('ci_alexandrohomes.listings', 'ci_alexandrohomes.listings.ID=ci_alexandrohomes.assigned_property.listing_id');
    $this->db->where('akzapier.bookings.check_in !=', $from_date);
    $this->db->where('akzapier.bookings.check_out !=', $to_date);
    $this->db->where('ci_alexandrohomes.listings.city', $location);
    $this->db->where('ci_alexandrohomes.listings.bedrooms', $bedroom);
    $this->db->where('ci_alexandrohomes.listings.guests', $guests);
    $this->db->group_by('akzapier.properties.id', 'ASC')
    $query = $this->db->get();
    return $query->result();
}

Ошибка не отображается на странице, поэтому я преобразовалэто в SQL, чтобы увидеть реальную сделку:

SELECT * akzapier.bookings.id as BOOKING_ID, akzapier.properties.id as PROPERTY_ID, ci_alexandrohomes.assigned_property.ID as ASSIGNED_PROPERTY_ID, ci_alexandrohomes.listings.ID as LISTING_ID
FROM akzapier.bookings 
INNER JOIN akzapier.properties ON akzapier.properties.id=akzapier.bookings.property_id
INNER JOIN ci_alexandrohomes.assigned_property ON ci_alexandrohomes.assigned_property.property_id=akzapier.properties.id
INNER JOIN ci_alexandrohomes.listings ON ci_alexandrohomes.listings.ID=ci_alexandrohomes.assigned_property.listing_id
WHERE akzapier.bookings.check_in != '2019-09-21'
AND akzapier.bookings.check_out != '2019-09-30'
AND ci_alexandrohomes.listings.city = ‘1’
AND ci_alexandrohomes.listings.bedrooms = '2'
AND ci_alexandrohomes.listings.guests = '4'
GROUP BY akzapier.bookings.property_id ASC

ОШИБКИ СКАЗЫВАЕТ:

1055 - Выражение № 1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'akzapier.bookings.id ', который функционально не зависит от столбцов в предложении GROUP BY;это несовместимо с sql_mode = only_full_group_by

1 Ответ

0 голосов
/ 21 октября 2019

В общем, когда вы используете GROUP BY, ваш оператор SELECT должен содержать либо агрегаты (такие как MAX (...), COUNT (...) и т. Д.), Либо столбцы должны появляться в GROUP BY. Вы выбрали все поля, не агрегированные, со звездочкой *. В этом случае он жалуется на поле akzapier.bookings.id, которое не является ни агрегированным, ни в вашем GROUP BY.

Если вы действительно хотите уникальные значения, попробуйте SELECT DISTINCT, который удалит дублирующиеся строки изрезультат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...