Помогите оптимизировать запрос MySQL.

R34-zevs
На сайте с 15.07.2006
Offline
238
647
stdClass Object
(
[tid] => 2509
[name] => Кирпич строительный и облицовочный
[cid] => 1
[title] => ЖБИ, кладочные материалы
)
stdClass Object
(
[tid] => 2517
[name] => Труба асбоцементная безнапорная диам. 100 - 200 мм
[cid] => 1
[title] => ЖБИ, кладочные материалы
)
stdClass Object
(
[tid] => 2518
[name] => Блоки фундаментные, плиты перекрытия.
[cid] => 1
[title] => ЖБИ, кладочные материалы
)
stdClass Object
(
[tid] => 2519
[name] => Газобетон
[cid] => 1
[title] => ЖБИ, кладочные материалы
)
stdClass Object
(
[tid] => 2511
[name] => Шифер волновой и плоский
[cid] => 3
[title] => Кровельные материалы
)
stdClass Object
(
[tid] => 2797
[name] => Строительное оборудование и инвентарь
[cid] => 10
[title] => Оборудование
)

есть запрос

$query = $db->query("
SELECT
a.tid, a.name, b.cid, b.title
FROM
".DB_PREFIX."_tovari AS a INNER JOIN
".DB_PREFIX."_tovari_categ AS b ON (a.cid=b.cid)
WHERE
a.cataid='".$cataid."'
ORDER BY b.cid ASC");


выводим по принципу :

while($result = $db->fetch_object($query))
{
print_r($result);

}

в конечном итоге вывод должен быть такой

ЖБИ, кладочные материалы

– Газобетон

– Блоки фундаментные, плиты перекрытия.

– Труба асбоцементная безнапорная диам. 100 - 200 мм

– Кирпич строительный и облицовочный

Кровельные материалы

– Шифер волновой и плоский

Оборудование

– Вибротехника

– Опалубка

– Строительное оборудование и инвентарь


Подскажите, как наиболее оптимально оптимизировать алгоритм, чтоб именно такой вывод получился?

Агентство недвижимости Фабрика Жилья (http://xn--80aacvicll3bzbzgqb.xn--p1ai/)
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

GROUP BY `b.title` добавьте, и будет группировка по Титлу, как ВЫ и хотите, а дальше уже средствами ПХП рисуйте что Вам нужно.

Подпись))
IL
На сайте с 20.04.2007
Offline
435
#2

Милованов Ю.С, есть ощущение, что если добавить GROUP BY, то количество записей уменьшится.. до 1 на каждый уникальный b.title

R34-zevs, так надо MySQL оптимизировать, или разобрать результат его работы?

Чтобы вывод был похожим, следует

выводим по принципу :

while($result = $db->fetch_object($query)) 

{
print_r($result);

}

заменить на что-то вроде


$old_title = '';
while($result = $db->fetch_object($query))
{
if ($old_title!=$result->title) {
echo "<b>{$result->title}</b><br/>";
$old_title = $result->title;
}
echo "- {$result->name}<br/>";
}
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3

ivan-lev, про ощущение это такая форма стеба и Вы уверены что так и будет, или же Вы реально сомневаетесь? Гроуп Бай насколько знаю групирует, а по одной записи это DISTINCT.

Если не прав - дайте линк на умную литературу.

R34-zevs
На сайте с 15.07.2006
Offline
238
#4

Всё сделал, спасибо за ответ Иван, разобрался.

edogs software
На сайте с 15.12.2005
Offline
775
#5
Милованов Ю.С:
ivan-lev, про ощущение это такая форма стеба и Вы уверены что так и будет, или же Вы реально сомневаетесь? Гроуп Бай насколько знаю групирует, а по одной записи это DISTINCT.

Издеваетесь? Груп бай группирует, и отдает 1 представителя группы, в определённой мере это аналог distinct-а.

Милованов Ю.С:
Если не прав - дайте линк на умную литературу.

mysql.org

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#6

Точно, мой затуп, вспомнил как сам юзал групировку и что из этого получалось. Последствия пятницы-субботы:)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий