2015-05-31 4 views
0

У меня есть база данных с именем «products», которая имеет столбец «categories». Эта таблица содержит четыре категории продуктов, а именно: electronic, Decoration, clothes и vehicle. Моя цель, чтобы показать эти category с их count я e:if there are four products belongs to category electronic, then output should be like this :electronic=4 и так далееПолучение нулевого массива PHP

Мой код

public function category() 
     { 
     $arrayCategorys = ['electronic','Decoration','clothes','vehicle']; 
     $data = []; 
     foreach($arrayCategorys as $arrayCategory) 
     { 
     $sql = "SELECT count(id) FROM products WHERE categories='$arrayCategory'"; 
     $records = \DB::select($sql); 
     $data = array_merge_recursive($data, [ 

        "{$arrayCategory}" =>isset($records[0]->count), 

      ]); 
     $data=array_filter($data); 
     dd($data); 
     } 
} 

Я хочу показать выход, как этот

'electronic'=>'4', 

'Decoration'=>'2', 

'clothes'=>'2', 

'vehicle'=>'1' в соответствии с данными в базе данных но IAM получения ничего, []

ответ

1

Вы можете GROUP BY ваши категории, как таким образом, когда вы COUNT

SELECT categories,COUNT(*) 
FROM products 
GROUP BY categories; 

Для идеи:http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-count-with-group-by.php

EDIT: Хотя я не знаком с синтаксисом laravel5, но это может работать для вас

$result = DB::table('products') 
      ->select('products.categories', 
         DB::raw('count(products.id) as category_count') 
        ) 
      ->orderBy('products.id', 'asc') 
      ->groupBy('products.categories') 
      ->get(); 
+0

Спасибо за помощь –

+0

, как я могу использовать конструктор запросов для этого в laravel5 –

+0

@RanjitKarki я обновил свой ответ. сообщите мне, что это работает для вас или нет? –

0

Вы использовали isset($records[0]->count), но имя столбца для счета будет count(id). Назовите счет count следующим образом: "SELECT count(id) AS count FROM products WHERE categories='$arrayCategory'". И вы не сможете получить счет, просто проверив, установлен ли он. Удалите isset и просто используйте $records[0]->count. Код должен выглядеть следующим образом:

public function category() 
{ 
     $arrayCategorys = ['electronic','Decoration','clothes','vehicle']; 
     $data = []; 
     foreach($arrayCategorys as $arrayCategory) 
     { 
     $sql = "SELECT count(id) AS count FROM products WHERE categories='$arrayCategory'"; 
     $records = \DB::select($sql); 
     $data = array_merge_recursive($data, [ 

        "{$arrayCategory}" =>$records[0]->count, 

      ]); 
     $data=array_filter($data); 
     dd($data); 
     } 
} 
Смежные вопросы