Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Проблема в составлении $sql из массивов в цикле, Возникла проблема с уникальными элементами массива и $sql
Strannik  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 8 лет, 2 месяца, 16 дней
Карма: 0




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

Существует код:
$mass = array(22,23,23,23,38,38);
$mas = array_unique($mass); //выбираем уникальные значения
$line = count($mas);// подсчитываем количество уникальных значений
$pr1='';
$products = '22,23,23,23,38,38';// id продуктов из базы
for($i=0;$i<$line;$i++)
{
$product=$mas[$i]; //выбираем элемент массива
$sql5="SELECT * FROM `product` WHERE `id` = '$product'"; //выбираем данные по этому элементу
$res5=mysql_query($sql5);
$info5=mysql_fetch_assoc($res5);
$count_pr=substr_count($products,$mas[$i]);
$count='- '.$count_pr;
$pr1 .=$info5["name"].$count; // указываем наименование товара и его количество
}


Исходя из этой темы понимаю, что запрос $sql5 составлен с ошибками, но если в прошлой теме нужно было только сделать выборку из базы с учетом всех уникальных элементов массива, то здесь нужно сделать выборку по каждому уникальному элементу массива($product), подсчитать его количество в $products и затем вывести наименование каждого уникального элемента и его количество.

Как правильно это сделать?



Спустя 1 час, 18 минут, 29 секунд (7.04.2012 - 13:56) nugle написал(а):
Если правильно понял, то вот
$arr = array();
$line = count($mas);// подсчитываем количество уникальных значений
$pr1='';
$products = '22,23,23,23,38,38';// id продуктов из базы
$mass = explode(',', $products);
$sql = '';
foreach($mass as $key => $val)
{
$arr[$val]++;
$sql = ($arr[$val] == 1) ? $sql.',"'.$val.'"' : $sql;
}
$sql = trim($sql, ',');
$query = mysql_query('SELECT * FROM `product` WHERE `id` in ('.$sql.')');
while($row = mysql_fetch_assoc($query))
echo $row['name'].' - '.$arr[$row['id']].'<br />';

Спустя 10 минут, 48 секунд (7.04.2012 - 14:07) Strannik написал(а):
nugle
не работает(

приведу полный свой код:

while($info1=mysql_fetch_assoc($res1))
{
$mass = explode(",", $info1["products"]); //$info1["products"] =' 22,23,23,23,38,38';
$mas = array_unique($mass);
$line = count($mas);
$pr1='';
for($i=0;$i<$line;$i++)
{
$product=$mas[$i];
$sql5="SELECT * FROM `product` WHERE `id` = '$product'";
$res5=mysql_query($sql5);
$info5=mysql_fetch_assoc($res5);
$count_pr=substr_count($info1["products"],$mas[$i]);
$count='- '.$count_pr;
$pr1 .=$info5["name"].$count.'<b>|</b>';
}

echo $pr1;

Спустя 5 минут, 55 секунд (7.04.2012 - 14:13) m4a1fox написал(а):
Strannik
Цитата
не работает(

Ошибка какая?

Спустя 2 минуты, 13 секунд (7.04.2012 - 14:15) Strannik написал(а):
nugle
все получилось, спасибо

P.S.: неправильно указал массив...
P.P.S.: если не трудно поясни строчку
$sql = ($arr[$val] == 1) ? $sql.',"'.$val.'"' : $sql;

впервые столкнулся

Спустя 2 минуты, 7 секунд (7.04.2012 - 14:17) m4a1fox написал(а):
Strannik
Тернарный оператор!
$sql = ($arr[$val] == 1) ? $sql.',"'.$val.'"' : $sql;

if($arr[$val] == 1)
$sql = $sql.',"'.$val.'"';
else
$sql = $sql;

Спустя 3 минуты, 51 секунда (7.04.2012 - 14:21) Strannik написал(а):
m4a1fox
Спасибо за разъяснения.
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса