Отделяне на резултати

lub4o

Registered
Здравейте, имам една таблица с резултати от вида:
id user code
1 admin 2244
2 gogo 1123
3 petio 2244
4. milen 1123
5 ivan 1123
6 slavi 5511
7 richi 2244



Може да имам много резултати с един и същ код, тоест мога да имам 5 потребителя с код 2244 мога да имам 2 с код 2244, целта ми е когато ги вадя от базата да ги групирам да стане нещо от сорта на:

1 admin 2244
3 petio 2244
7 richi 2244
Някакъв текст
5 ivan 1123
4. milen 1123
2 gogo 1123
някакъв текст
6 slavi 5511

Целта ми е да ги групирам така и между резултатите с различни кодове да има някакъв текст или картинка каквото и да било, просто групите да ги отделям с нещо. Идеи?
 
lub4o каза:
Да, но как да ги отделя с едно <hr /> например >?
Е как , след всеки цикъл (показване на 1 запис групиран) поставяш <hr> тагът в кода?Къде е проблема не разбрах?
 
hous каза:
Group by в заявката?
С group by ще е малко трудно да се слага текст след всяка група.

lub4o каза:
Да, но как да ги отделя с едно <hr /> например >?

А знаеш ли какви са кодовете? Ако ги знаеш, правиш 2 цикъла един в друг, нещо такова:

PHP:
$kodove = array(2244,1123,5511);//тук са всички кодове
while(list(,$kod) = each($kodowe))
{
   $sql = "select * from table where kod = $kod";
   $result = mysqli_query($sql);
   while($row = mysqli_fetch_array($result, MYSQL_ASSOC))
   {
      echo "<tr>";
      echo "<td>$row['id']</td>";
      echo "<td>$row['username']</td>";
      echo "<td>$row['kod']</td>";
      echo"</tr>";
   }
   echo "<hr />";
}

Това работи горе-долу по следния начин:
Минава през всички стойности за кодовете, като през всяко преминаване:
1. избира от таблицата всичко, за което колоната kod е равна текущият код, който е взет при преминаването на цикъла
2. печата резултатите, като накрая слагаш хоризонтална черта
3. продължава цикъла
 
[sql]
DROP TABLE IF EXISTS DEMO;

CREATE TABLE DEMO(id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL DEFAULT '',
usercode INT NOT NULL DEFAULT 0);

INSERT INTO DEMO VALUES
(1,'admin',2244),
(2,'gogo',1123),
(3,'petio',2244),
(4,'milen',1123),
(5,'ivan',1123),
(6,'slavi',5511),
(7,'richi',2244);
[/sql][sql]
(SELECT B.id,
B.username,
B.usercode,
A._CNT FROM (SELECT usercode,
COUNT(*) _CNT
FROM DEMO
GROUP BY 1
ORDER BY 2 DESC) A
NATURAL JOIN DEMO B
ORDER BY A._CNT DESC,A.usercode DESC)
UNION ALL
(SELECT '',
'<hr> Some Text </hr>',
usercode,
COUNT(*)
FROM DEMO
GROUP BY 1,2,3)
ORDER BY _CNT DESC,
usercode DESC,
username='<hr> Some Text </hr>' ASC,
username ASC;
[/sql]
mysql> (SELECT B.id,
-> B.username,
-> B.usercode,
-> A._CNT FROM (SELECT usercode,
-> COUNT(*) _CNT
-> FROM DEMO
-> GROUP BY 1
-> ORDER BY 2 DESC) A
-> NATURAL JOIN DEMO B
-> ORDER BY A._CNT DESC,A.usercode DESC)
-> UNION ALL
-> (SELECT '',
-> '<hr> Some Text </hr>',
-> usercode,
-> COUNT(*)
-> FROM DEMO
-> GROUP BY 1,2,3)
-> ORDER BY _CNT DESC,
-> usercode DESC,
-> username='<hr> Some Text </hr>' ASC,
-> username ASC;
+----+----------------------+----------+------+
| id | username | usercode | _CNT |
+----+----------------------+----------+------+
| 1 | admin | 2244 | 3 |
| 3 | petio | 2244 | 3 |
| 7 | richi | 2244 | 3 |
| | <hr> Some Text </hr> | 2244 | 3 |
| 2 | gogo | 1123 | 3 |
| 5 | ivan | 1123 | 3 |
| 4 | milen | 1123 | 3 |
| | <hr> Some Text </hr> | 1123 | 3 |
| 6 | slavi | 5511 | 1 |
| | <hr> Some Text </hr> | 5511 | 1 |
+----+----------------------+----------+------+
10 rows in set (0.01 sec)
 

Back
Горе