Как извлекать и объединять данные в соответствии с groupby Mysql Php

#php #mysql #sql

Вопрос:

Я работаю с mysql и php и хочу получить данные по «городу» в массиве Вот моя таблица «торговцы»

 merchantid              localityId
1                           30                       
2                           30       
3                           31
4                           30
5                           32
 

Вот таблица «населенный пункт»

 localityId               cityId           name
30                          1              abc 
31                          1              xyz
32                          2              xya
 

Вот таблица «город»

 cityId                  name
1                       Chandigarh
2                       Panchkula
3                       Delhi
4                       Mumbai
 

И я хочу получить данные в соответствии с «городом/населенным пунктом»,например,я хочу получить всю запись города(группа по городу), другими словами, я хочу, как следующий вывод, как я могу это сделать ?

 {
    "Status": "1",
    "data": [
        {
            "localityName": "Chandigarh",
            "FilterType": "filter",
            "result": [
                {
                    "id": "1",
                    "name": "",
                    //other info
                },
                {
                    "id": "2",
                    "name": "",
                    //other info
                },
           "localityName": "Panchkula",
            "FilterType": "filter",
            "result": [
                {
                    "id": "3",
                    "name": "",
                    //other info
                },
                {
                    "id": "4",
                    "name": "",
                    //other info
                },  
                ...And so on   
         }       
 

Я попытался использовать следующий код , но дал мне список населенного пункта/города,не дав мне результата
, как я хочу, Где я ошибаюсь ?

 $this->db->select('l.localityId,c.name,c.cityId');
    $this->db->from('merchants m'); 
    $this->db->join('locality l', 'l.localityId=m.localityId');
    $this->db->join('city c', 'c.cityId=l.cityId');
    $this->db->group_by('l.cityId');         
    $query = $this->db->get(); 
    if($query->num_rows() != 0)
    {
        return $query->result_array();
    }
    else
    {
        return false;
    }
 

Комментарии:

1. Что вы пытались сделать, чтобы решить свою проблему? Почему бы сначала не проверить, какой SQL-запрос подходит для вашего случая (без использования PHP!), а затем реализовать этот запрос?

Ответ №1:

Вы можете попробовать использовать следующий код

 $this->db->select('l.localityId,l.name')
->from('merchants m') 
->join('locality l', 'l.localityId=m.localityId')
->group_by('m.localityId')
->limit($limit);        
 $query = $this->db->get();
 if($query->num_rows() != 0)
     {
        return $res=$query->result_array();
     }
 else
     {
        return false;
     }
 

Ответ №2:

Вы можете попробовать это:

 SELECT c.cityId,c.name,GROUP_CONCAT(DISTINCT(CONCAT(l.localityId))) from locality l 
JOIN merchants m on l.localityId=m.localityId
JOIN city c on c.cityId=l.cityId
GROUP BY l.cityId;
 

Живая демонстрация здесь: SQL-СКРИПКА