Вывести таблицу двойным циклом. Возможно ли это?

zned

Новичок
Вывести таблицу двойным циклом. Возможно ли это?

Существует таблица пользователи-категории.
Необходимо с помощью вложенного цикла вывести таблицу:

----------------|-категория1--|-категория2--|-категория3--|-категория4--|
пользователь1-|------13------|------14------|------15------|------12------|
пользователь2-|------32------|------31------|------29------|------22------|
пользователь3-|------16------|------17------|------28------|------21------|
пользователь4-|------34------|------36------|------27------|------32------|
всего----------|------95------|------98------|------99------|------87------|

Чтобы было как-то так:
PHP:
$resultuser = mysql_query("SELECT user FROM userlist");//Подключаюсь к таблице пользователей
 $myrowuser = mysql_fetch_array($resultuser);//Массив пользователей
 do
 {//Перебор пользователей
 $user = $myrowuser[user];
 $result_cat = mysql_query("SELECT cat FROM catlist");//Подключаюсь к таблице категорий
 $myrow_cat = mysql_fetch_array($result_cat);//Массив категорий
  
 do
 {//Перебор категорий
 $cat = $myrow_cat[cat];
 $result_user_cat = mysql_query("SELECT * FROM table WHERE user='$user' cat = '$cat'");
 $num_rows_user_cat = mysql_num_rows($result_user_cat);
 }//Перебор категорий
  
 while ($myrow_cat = mysql_fetch_array($result_cat));
  
 echo "<table><tr><th>$user</th><th>$num_rows_user_cat</th><th>$num_rows_user_cat</th>
 <th>$num_rows_user_cat</th><th>$num_rows_user_cat</th></table>";
 }//Перебор пользователей
  
 while ($myrowuser = mysql_fetch_array($resultuser));
Но здесь возникает проблемка:
нужно чтобы каждый проход менялось название переменной $num_rows_user_cat
с помощью счетчика или еще как-то, и эти названия потом выводились в таблицу
К примеру чтобы в первый проход цикла она называлась $num_rows_user_cat1
в следующий проход $num_rows_user_cat2 и т.д.
Возможно ли это сделать?

P.S.: В данный момент таблица выводится так:
PHP:
$result_user = mysql_query("SELECT user FROM userlist");//Подключаюсь к таблице пользователей
$myrow_user = mysql_fetch_array($result_user);//Массив пользователей
do
{
$user = $myrow_user[user];
$result_cat1 = mysql_query("SELECT * FROM table WHERE user='$user' cat = 'категория1'");
$num_rows_cat1 = mysql_num_rows($result_cat1);
$result_cat2 = mysql_query("SELECT * FROM table WHERE user='$user' cat = 'категория2'");
$num_rows_cat2 = mysql_num_rows($result_cat2);
$result_cat3 = mysql_query("SELECT * FROM table WHERE user='$user' cat = 'категория3'");
$num_rows_cat3 = mysql_num_rows($result_cat3);
$result_cat4 = mysql_query("SELECT * FROM table WHERE user='$user' cat = 'категория4'");
$num_rows_cat4 = mysql_num_rows($result_cat4);
echo "<table><tr><th>$user</th><th>$num_rows_cat1</th><th>$num_rows_cat2</th>
<th>$num_rows_cat3</th><th>$num_rows_cat4</th></table>";
}
while ($myrow_user = mysql_fetch_array($result_user));
}
И при большом количестве категорий, это мягко говоря, не очень удобно.
 

Фанат

oncle terrible
Команда форума
по идиотскому do while можно безошибочно определить жертву евгения ж то есть попова :)

-~{}~ 07.06.09 13:09:

сколько строк возвращает запрос SELECT * FROM table WHERE user='ххх' cat = 'ууу'?
 

zned

Новичок
Автор оригинала: *****
сколько строк возвращает запрос SELECT * FROM table WHERE user='ххх' cat = 'ууу'?
Если делать способом который вначале то $num_rows_user_cat=0
Поэтому меня и интересует: в принципе возможно ли сделать это
через вложенный цикл
, или это делается только через join?
 

Фанат

oncle terrible
Команда форума
сколько строк должен возвращать запрос SELECT * FROM table WHERE user='ххх' cat = 'ууу'?
и почему?
 

zned

Новичок
Автор оригинала: *****
сколько строк должен возвращать запрос SELECT * FROM table WHERE user='ххх' cat = 'ууу'?
и почему?
Это простая статистика пользователей, считает сколько у пользователя строк в какой-то категории.
Допустим категория1 это фильмы, категория2 - музыка, значит считаем сколько у кого фильмов, музыки и т.д.
Цифры которые должны получиться указаны в таблице. Если считать статистику вторым способом,
то все прекрасно работает
, если считать первым способом, то выдает нулевой (не верный) результат.
Хотелось бы сделать статистику как-то на подобие первого способа, или это не возможно?
 

dimagolov

Новичок
zned, ты понимаешь, что вывод таблицы вложенным циклом это, по-сути, единственный возможный способ, так как таблица это набор строк, каждая из которых это набор ячеек. вот у тебя и получается вложенные циклы.

но вывод таблицы никоим боком не относится к запросу данных, которые в нее надо вывести. SQL запросы по своей природе всегда возвращают таблицу. То, каким должен быть запрос и сколько их должно быть, зависит от структуры БД, от того какие есть таблицы и какие в них поля, но больше ни от чего.
 

Dl

Новичок
Желательно еще, чтобы запрос был составлен без ошибок
 

Фанат

oncle terrible
Команда форума
ё-моё.
картинка в посте - это не таблица, а вывод
СТРУКТУРУ ТАБЛИЦ ПРИВЕДИ
 

zned

Новичок
Автор оригинала: *****
СТРУКТУРУ ТАБЛИЦ ПРИВЕДИ
Таблица userlist это список всех пользователей:

------id-----|-user-|
------1------|user1|
------2------|user2|
------3------|user3|
------4------|user4|
------5------|user5|

Таблица catlist это список всех категорий:

------id-----|-cat-|
------1------|cat1|
------2------|cat2|
------3------|cat3|
------4------|cat4|
------5------|cat5|

Таблица table это список у каких пользователей какие есть категории:

------id-----|-user-|cat-|
------1------|user1|cat3|
------2------|user2|cat2|
------3------|user5|cat3|
------4------|user2|cat3|
------5------|user2|cat5|
 

Фанат

oncle terrible
Команда форума
что-то я не пойму. кто-то из нас тупит.
а как таблица table помогает понять, сколько у юзера музыки?
 

zned

Новичок
Автор оригинала: *****
а как таблица table помогает понять, сколько у юзера музыки?
Если допустим сделать запрос:
PHP:
$result_cat3 = mysql_query("SELECT * FROM table WHERE user='user2' cat = 'cat3'"); 
$num_rows_cat3 = mysql_num_rows($result_cat3);
То $num_rows_cat3 - это количество всех картинок у пользователя user2 (к примеру).
 

Фанат

oncle terrible
Команда форума
странно. а почему запрос идет к таблице user_cat , а не files?
если бы мне пришлось хранить такие данные, то у меня в таблице files были бы поля user_id и cat_id
и уже по ней я бы считал, сколько у кого чего.

а какой смысл в твоей таблице? Если она сама по себе, не связана с собственно единицами хранения?
или они вообще не хранятся?
 

zned

Новичок
Автор оригинала: *****
а какой смысл в твоей таблице? Если она сама по себе, не связана с собственно единицами хранения?
или они вообще не хранятся?
Смысл в том, что в ней никакие файлы не хранятся,
и считаю я категории, а музука и картинки это просто пример.
 

Фанат

oncle terrible
Команда форума
а можно привести здесь реальную задачу, а не гипотетическую.
мне кажется, что не стоит абстрагировать задачу, не обладая элементарными знаниями в предметной области, не в обиду будь сказано.

как уже выше неоднократно отметили, вывод делается одним циклом, одним запросом, подсчет средствами БД.
но конкретные рекомендации можно дать только по конкретной структуре данных
 

zned

Новичок
Автор оригинала: *****
а можно привести здесь реальную задачу, а не гипотетическую.
Задача посчитать заявки у каждого пользователя. Заявки делятся на категории.
В таблице table есть еще описание заявки и др. поля относительно заявки.
 

Фанат

oncle terrible
Команда форума
Это, если даже и снова выдумано, но все равно гораздо ближе к реальности.

блин, тут двойная, что ли, группировка получается...
по одному-то юзеру просто
select cat, count(cat) from table where user=user group by cat
а как с двойной делать, я забыл. ну, или вложенным, да. :(
 

zned

Новичок
Автор оригинала: *****
Это, если даже и снова выдумано, но все равно гораздо ближе к реальности.
Нет не выдумано
Автор оригинала: *****
по одному-то юзеру просто
По одному и сам бы сделал

Автор оригинала: prolis
а количество категорий будет фиксировано?
Нет, может измениться.
(И количество пользователей тоже меняется.)
 
Сверху