Вернуть наиболее частый результат по значению поля в цикле?

У меня есть цикл for, который возвращает название производителя, соответствующее списку продуктов:

for ($i = 0, $n = sizeof($order->products); $i < $n; $i++) {
$v_query = tep_db_query("SELECT manufacturers_id FROM ".TABLE_PRODUCTS." WHERE products_id = '".$order->products[$i]['id']."'");
$v = tep_db_fetch_array($v_query);
$mfg_query = tep_db_query("SELECT manufacturers_name FROM ".TABLE_MANUFACTURERS." WHERE manufacturers_id = '".$v['manufacturers_id']."'");
$mfg = tep_db_fetch_array($mfg_query);

echo $mfg['manufacturers_name'];
}

Как вернуть только одно наименование производителя, которое наиболее часто встречается в списке? Я не могу получить результаты, правильно назначенные в виде массива, чтобы выполнить подсчет / поиск массива.

0

Решение

Прежде всего, вы можете вставить все свои product_ids в одном массиве, чтобы поместить его в один запрос:

$productIds = array();
for ($i = 0, $n = sizeof($order->products); $i < $n; $i++) {
$productIds[] = $order->products[$i]['id'];
}
$productIds = array_unique($productIds);

Чем вам нужно сделать это в одном запросе для всех product_ids, например так:

$sql = "SELECT manufs.manufacturers_id, manufs.manufacturers_name, COUNT(*) as manufacturers_count
FROM ".TABLE_PRODUCTS." prods
JOIN ".TABLE_MANUFACTURERS." manufs
ON prods.manufacturers_id = manufs.manufacturers_id
WHERE products_id IN ('". implode("', '", $productIds) ."')
GROUP BY manufs.manufacturers_id
ORDER BY manufacturers_count DESC";

Это вас всех достанет manufacturers_idы, их имена вместе с количеством строк, присутствующих в базе данных, отсортированы по убыванию (от высокого к низкому).

РЕДАКТИРОВАТЬ:

Я отметил, что вы никоим образом не используете идентификатор заказа, поэтому приведенный выше запрос (и тот, который вы разместили — также) будет искать среди всех ваших заказов и учитывать самые популярные продукты. Если вы хотите получить самый популярный продукт за один / несколько заказов, вам нужно добавить JOIN с таблицей заказов, а затем добавить определенное условие к вашему WHERE пункт.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]