Ik ben bezig om samen met iemand een chatserver te maken die (deels) gebaseerd is op SQL.
Allemaal heel mooi natuurlijk, maar stuit wel tegen een klein probleempje aangaande de roomlijst.
We willen dat we hem op elk veld kunnen sorteren, zowel 'gewoon' als af tellend (descending).
Heb hem op zich ook helemaal af, behalve die voor het aantal. Ik heb wel een manier klaar, om te tellen hoeveel rooms dat er zijn, maar dat is een query die ik laat lopen in de al bestaande while-loop.
Eerst maar eens even de (benodigde) DB structuur schetsen:
Over dat aantal veld in de rooms tabel, dat is weliswaar de makkelijkste oplossing, het is dus (mijns inziens) niet redundant, vandaar dat ik het wil proberen op te lossen door het te tellen vanuit koppeltabel user_rooms... Dus oplossing 1 valt eigenlijk af, tenzij er echt niets anders op zit...
Een collega op mijn werk, vertelde me, dat ik dan met joins moet werken, maar dat maakt niet uit, aangezien je dan maar 1 resultaat terug krijgt, namelijk die van het totaal aantal users die zich in rooms bevinden, en daar is eigenlijk geeneens een (left) join voor nodig.
Wat ik dus zelf heb geprobeert, is een query maken die (dat dacht ik toen althans) het aantal chatters per room optelt:
Ben ook nog niet helemaal thuis in SQL, dus andere / betere zoektermen die ik zou kunnen gebruiken weet ik helaas niet te bedenken.
Hopelijk snappen jullie mijn probleem een beetje, anders lees ik de vragen wel
Een voorbeeld is overigens te zien op http://www.appieskamertjuh.nl/chat/roomlist_test.php alwaar het sorteren op alles (behalve aantal dus) werkt...
Ik gebruik overigens PHP5 en MySQL 5...
Allemaal heel mooi natuurlijk, maar stuit wel tegen een klein probleempje aangaande de roomlijst.
We willen dat we hem op elk veld kunnen sorteren, zowel 'gewoon' als af tellend (descending).
Heb hem op zich ook helemaal af, behalve die voor het aantal. Ik heb wel een manier klaar, om te tellen hoeveel rooms dat er zijn, maar dat is een query die ik laat lopen in de al bestaande while-loop.
Eerst maar eens even de (benodigde) DB structuur schetsen:
SQL:
Ik kan nu twee dingen doen: een aantal veld in de rooms tabel plaatsen en die elke keer updaten als iemand een room joint, maar dan is de mogelijkheid er, dat er redundantie ontstaat, aangezien er dan ook een record word weggeschreven in de user_rooms tabel. Hiervandaan is het dus ook gewoon mogelijk lijkt me, om met een simpele count query achter het aantal mensen in een bepaalde room te komen. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| CREATE TABLE `user_rooms` ( `user_id` int(10) NOT NULL, `room_id` int(3) default NULL, `mode` tinytext, `status` tinyint(1) default '0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `rooms` ( `id` int(3) NOT NULL auto_increment, `roomnaam` varchar(25) default NULL, `roomhex` tinytext, `roommodes` varchar(50) default NULL, `pass_gold` tinytext, `pass_brown` tinytext, `categorie` varchar(2) default NULL, `language` varchar(2) default NULL, `registered` tinyint(1) default NULL, `topic` varchar(50) default NULL, `onjoin` varchar(100) default NULL, `ip_creation` varchar(15) default NULL, `date_creation` int(15) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `roomnaam` (`roomnaam`), UNIQUE KEY `topic` (`topic`), UNIQUE KEY `onjoin` (`onjoin`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Over dat aantal veld in de rooms tabel, dat is weliswaar de makkelijkste oplossing, het is dus (mijns inziens) niet redundant, vandaar dat ik het wil proberen op te lossen door het te tellen vanuit koppeltabel user_rooms... Dus oplossing 1 valt eigenlijk af, tenzij er echt niets anders op zit...
Een collega op mijn werk, vertelde me, dat ik dan met joins moet werken, maar dat maakt niet uit, aangezien je dan maar 1 resultaat terug krijgt, namelijk die van het totaal aantal users die zich in rooms bevinden, en daar is eigenlijk geeneens een (left) join voor nodig.
Wat ik dus zelf heb geprobeert, is een query maken die (dat dacht ik toen althans) het aantal chatters per room optelt:
SQL:
Maar dit geeft dus, zoals ik al vaker zei, het totaal aantal chatters van alle rooms tezamen terug, wat niet de bedoeling is.1
2
3
| SELECT COUNT(`room_id`) as aantal FROM `user_rooms` LEFT JOIN `rooms` ON user_rooms.room_id = rooms.id |
Ben ook nog niet helemaal thuis in SQL, dus andere / betere zoektermen die ik zou kunnen gebruiken weet ik helaas niet te bedenken.
Hopelijk snappen jullie mijn probleem een beetje, anders lees ik de vragen wel
Een voorbeeld is overigens te zien op http://www.appieskamertjuh.nl/chat/roomlist_test.php alwaar het sorteren op alles (behalve aantal dus) werkt...
Ik gebruik overigens PHP5 en MySQL 5...
[ Voor 7% gewijzigd door CH4OS op 04-08-2006 22:45 ]