简体   繁体   English

GROUP_BY 中的错误,查询来自两个数据库 CODEIGNITER

[英]ERROR in GROUP_BY with query getting from two databases CODEIGNITER

I have a query which joins tables from two different databases.我有一个查询,它连接来自两个不同数据库的表。 It is already showing results but then I wanted to show only unique results because some results are redundant.它已经显示了结果,但是我只想显示独特的结果,因为有些结果是多余的。 So I added a GROUP BY to get only the unique results but an error appears.所以我添加了一个 GROUP BY 以仅获得唯一结果但出现错误。

This is my code:这是我的代码:

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();
}

The error doesn't show up in the page so I converted it to SQL to see the real deal:该错误未显示在页面中,因此我将其转换为 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

ERROR SAYS:错误说:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'akzapier.bookings.id' which is not functionally dependent on columns in GROUP BY clause; 1055 - SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 'akzapier.bookings.id'; this is incompatible with sql_mode=only_full_group_by这与 sql_mode=only_full_group_by 不兼容

In general, when you use GROUP BY, your SELECT statement must contain either aggregates (such as MAX(...), COUNT(...), etc.) or the columns must appear in GROUP BY.通常,当您使用 GROUP BY 时,您的 SELECT 语句必须包含聚合(例如 MAX(...)、COUNT(...) 等)或列必须出现在 GROUP BY 中。 You have selected all of the fields, non-aggregated, with the asterisk *.您已选择所有带星号 * 的非聚合字段。 In this case, it's complaining about the field akzapier.bookings.id, which is neither aggregated, nor in your GROUP BY.在这种情况下,它抱怨的字段 akzapier.bookings.id 既不是聚合的,也不是在您的 GROUP BY 中。

If you actually want unique values, try SELECT DISTINCT, which will drop duplicate rows from the result.如果您确实想要唯一值,请尝试 SELECT DISTINCT,这将从结果中删除重复的行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM