#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-СКРИПКА