Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчёт одинаковых значений поля
 
 автор: designshadow   (14.06.2009 в 18:44)   письмо автору
 
 

Как подсчитать количество одинаковых значений поля cat и записать их в переменные или в массив, не знаю как лучше.
Т.е. я собираюсь использовать данный подсчёт в меню:

-процессоры (35)
Intel(20)
Amd(15)

-память (24)
Pqi (20)
Kingston (4)

-Hdd (45)
Samsung (20)
Hitachi (20)
Maxtor (5)

  Ответить  
 
 автор: nikita2206   (14.06.2009 в 18:50)   письмо автору
 
   для: designshadow   (14.06.2009 в 18:44)
 

<?
$result 
mysql_query('SELECT COUNT() FROM `table` ');
$row    mysql_fetch_array($result);
echo 
$row[0];

  Ответить  
 
 автор: designshadow   (14.06.2009 в 18:59)   письмо автору
 
   для: nikita2206   (14.06.2009 в 18:50)
 

А как узнать, например кол-во на cat=3 без лишнего запроса к БД,
echo $row[3]; - так же не получится...

  Ответить  
 
 автор: maxtet   (14.06.2009 в 19:29)   письмо автору
 
   для: designshadow   (14.06.2009 в 18:59)
 

$result = mysql_query("SELECT * FROM table WHERE cat=3");
$row = mysql_num_rows($result);
echo $row;

  Ответить  
 
 автор: designshadow   (14.06.2009 в 19:35)   письмо автору
 
   для: maxtet   (14.06.2009 в 19:29)
 

А если мне нужно узнать второе значение кол-ва на cat=5, то мне опять надо делать запрос к базе?

Реально ли сразу записать значения кол-ва всех cat в массив или в переменные, и потом работать с каждом cat по-отдельности без запросов к БД?

  Ответить  
 
 автор: maxtet   (14.06.2009 в 19:45)   письмо автору
 
   для: designshadow   (14.06.2009 в 19:35)
 

Реально, для этого вам достаточно прогнать ваш массив в цикле. Например:

$cat = array(1, 2, 3, 4, 5);
foreach ($cat as $val)
{
$result = mysql_query("SELECT * FROM table WHERE cat=".$val."");
$row = mysql_num_rows($result); // результат занесется в переменную
echo $row."<br>";


или

$cat = array(1, 2, 3, 4, 5);
foreach ($cat as $key => $val)
{
$result = mysql_query("SELECT * FROM table WHERE cat=".$val."");
$row[$key] = mysql_num_rows($result); // результат занесется в елемент массива
echo $row[$key]."<br>";

  Ответить  
 
 автор: designshadow   (15.06.2009 в 02:32)   письмо автору
 
   для: maxtet   (14.06.2009 в 19:45)
 

Ну, допустим я прогнал его в цикле,

Далее составляю меню:
Как я достану из массива нужное значение кол-ва для каждого товара?


<ul>
<li><a href="..cat=1">процессоры (<? echo x; ?>)</a></li> //cat =1
<li><a href="..cat=2">память (Кол-во?)</a> //cat =2
<ul>
<li><a href="..cat=21">Pqi (Кол-во?)</a></li> //cat =21
<li><a href="..cat=22">Samsung (Кол-во?)</a></li> //cat =22
<li><a href="..cat=23">Kingston (Кол-во?)</a></li> //cat =23
</ul>
</li>
<li><a href="..cat=3">Hdd (Кол-во?)</a> //cat =3
<ul>
<li><a href="..cat=31">Maxtor (Кол-во?)</a></li> //cat =31
<li><a href="..cat=32">Samsung (Кол-во?)</a></li> //cat =32
</ul>
</li>
</ul>

  Ответить  
 
 автор: maxtet   (15.06.2009 в 03:14)   письмо автору
 
   для: designshadow   (15.06.2009 в 02:32)
 

Раз вы храните данные в базе, для начала покажите её структуру.

  Ответить  
 
 автор: designshadow   (15.06.2009 в 03:40)   письмо автору
 
   для: maxtet   (15.06.2009 в 03:14)
 

1-ая таблица -товары
id, cat, title, description

2-ая таблица -категория
id, title
----------------------------------
В cat записывается значение id категории...

Было две идеи вывода многоуровнего меню:
1. циклами с запросами к базе
2. html'ом.
Решил использовать второй вариант, сделать меню на html и присвоить каждому подменю кол-во товара по категории...

Не знаю на сколько корректна теория, но время покажет :-)
Сейчас проблема в том, что не знаю как прописать для каждого подменю кол-во товаров взятых с подсчётом (cat) из БД (товары)

  Ответить  
 
 автор: maxtet   (15.06.2009 в 11:51)   письмо автору
 
   для: designshadow   (15.06.2009 в 03:40)
 

Вопрос по проектированию БД. А почему вы в таблице с товаром не добавите ещё одно поле, в котором будет храниться кол-во товаров с указанным названием?

  Ответить  
 
 автор: Trianon   (15.06.2009 в 13:13)   письмо автору
 
   для: maxtet   (15.06.2009 в 11:51)
 

потому что такое поле автоматически будет делать базу инконсистентной при изменении числа записей в таблице.

  Ответить  
 
 автор: ride   (15.06.2009 в 14:00)   письмо автору
 
   для: designshadow   (14.06.2009 в 18:44)
 

запрос
select cat,count(cat) as cnt from my_table group by cat


а если подробнее
<?php
$my_arr
=array();
$query=mysql_query("select cat,count(cat) as cnt from my_table group by cat");
while(
$res=mysql_fetch_assoc($query)){
   
$my_arr[$res['cat']]=$res['cnt'];
}

print_r($my_arr);
?>

  Ответить  
 
 автор: designshadow   (15.06.2009 в 17:38)   письмо автору
 
   для: ride   (15.06.2009 в 14:00)
 

Спасибо тебе, направил на путь истинный!
А если нету значения в базе на cat(109), то реально чтобы выводилось автоматом значение 0?

<ul>
<li><a href="..cat=109">процессоры (<? echo $my_arr[109]; ?>)</a></li> // как вывести так (0), а не ()?
<li><a href="..cat=2">память (<? echo $my_arr[2]; ?>)</a>
<ul>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования