Добрый день. Есть две таблицы Таблица 1: Id , ... и прочите параметры Таблица 2: Id, Table1_id, Name Нужно посчитать сколько во второй таблице параметров с одинаковыми Table1_id и вывести их в таблицу, делаю так: PHP: function getTable2(){ $query = new Query; $query->select('Table1_id'); $query->from('Table2'); $result = $query->all(); if(count($result) > 0){ foreach ($result as $value){ $array = array_count_values($value); } return $array; } } Потом напротив каждого параметра нужно вывести сколько их из второй таблицы. PHP: $getTable1 = getTable1(); $getTable2 = getTable2(); foreach ($getTable1 as $value){ if(isset($getTable2[$value['Id']])){ $photo = $getTable2[$value['Id']]; }else{ $photo = 0; } //ну и вывожу $photo } В итоге надо просто посмотреть количество элементов с конкретным id из первой таблицы, оно работает. Но меня смущает что вторая таблица тянется полностью вся, можно этого как то избежать? И я намудрил или это можно сделать проще?
что-то вроде этого. PHP: SELECT t1.id, t2.id as total FROM table1 t1 JOIN table2 t2 ON t1.id = t2.table1_id посмотри вложенные запросы. можно конечно отдельным запросом и обработать массивы. посмотри мои сообщения, я создавал когда-то
@Konstant1n я знаю как JOIN работает, но как сумму вытащить? --- Добавлено --- Первая таблица у меня как раз так и тянется =) PHP: $query = new Query; $query->select('WC.Id, WSMA.Name AS Material, WSCO.Name AS Color, WSMAN.Name AS Manufacturer, WC.Distinction, WC.Indicators, WST.Name AS WasteType, WC.Applying'); $query->from('Table1 AS WC'); $query->leftjoin('Table3 AS WSMA', 'WC.Material = WSMA.Id'); $query->leftjoin('Table4 AS WSCO', 'WC.Color = WSCO.Id'); $query->leftjoin('Table5 AS WSMAN', 'WC.Manufacturer = WSMAN.Id'); $query->leftjoin('Table6 AS WST', 'WC.WasteType = WST.Id'); $query->orderBy('WC.Date DESC'); $result = $query->all(); if(count($result) > 0){ return $result; }else{ return false; } А вот как сумму вытащить я не догоняю =(
@Konstant1n спасибо, нужно было все остальное запихнуть в GROUP BY зачем то, и заработало: PHP: $query = new Query; $query->select('WC.Id, WSMA.Name AS Material, WSCO.Name AS Color, WSMAN.Name AS Manufacturer, WC.Distinction, WC.Indicators, WST.Name AS WasteType, WC.Applying, COUNT(PH.Table1_Id) AS Photo'); $query->from('Table1.dbo.Catalog AS WC'); $query->leftjoin('Table2 AS PH', 'WC.Id = PH.Catalog_Id'); $query->leftjoin('Table3 AS WSMA', 'WC.Material = WSMA.Id'); $query->leftjoin('Table4 AS WSCO', 'WC.Color = WSCO.Id'); $query->leftjoin('Table5 AS WSMAN', 'WC.Manufacturer = WSMAN.Id'); $query->leftjoin('Table6 AS WST', 'WC.WasteType = WST.Id'); $query->groupBy(['WC.Id','WSMA.Name', 'WSCO.Name','WSMAN.Name', 'WC.Distinction', 'WC.Indicators', 'WST.Name', 'WC.Date', 'WC.Applying']); $query->orderBy('WC.Date DESC'); $result = $query->all(); if(count($result) > 0){ return $result; }else{ return false; }