Du burde nok lige normalisere dine database for at spare dig selv for meget spild tid.
I din bruger tabel, er dit username din primær nøgle... Det er fint nok, men den er ikke unik. Så du kan faktisk have 2+ personer der hedder det samme.
Hvis du vælger at lave et id til at identifisere dem, kan du også spare lidt plads i mange af dine tabeller (id'et bliver en int).
Eksempel på hvordan du ellers kan gøre det.:
CREATE TABLE tbl_sex (
sex_id int primary key auto_increment,
sex_name varchar(255) not null
);
CREATE TABLE tbl_user (
usr_id int primary key auto_increment,
usr_name varchar(255) not null unique,
usr_level int,
usr_email varchar(255),
usr_date datetime,
usr_text text,
usr_point int,
usr_sexid int
...
FOREIGN KEY(usr_sexid) REFERENCES tbl_sex(sex_id)
);
CREATE TABLE tbl_program (
prg_id int primary key auto_increment,
prg_name varchar(255) not null,
prg_description text,
prg_filelink varchar(255) not null,
prg_userid int,
...
FOREIGN KEY(prg_userid) REFERENCES tbl_user(usr_id)
);
Når du skal søge frem efter hvad en bruger har lavet af ting, sender du bare hans id rundt, og ikke hans brugernavn. Derudover er brugernavnet nu også unikt, så der er ikke der kan hedde det samme.
Når du så skal finde de 8 der har flest programmer, kan du gøre følgende:
Jeg indsætter lige lidt temp data:
insert into tbl_sex(sex_name) values('Mand');
insert into tbl_sex(sex_name) values('Kvinde');
insert into tbl_user(usr_name,usr_sexid) values('Jimmi',1);
insert into tbl_user(usr_name,usr_sexid) values('Palle',1);
insert into tbl_user(usr_name,usr_sexid) values('Vibeke',2);
insert into tbl_program(prg_name,prg_userid) values('program 1',1);
insert into tbl_program(prg_name,prg_userid) values('program 2',1);
insert into tbl_program(prg_name,prg_userid) values('program 3',1);
insert into tbl_program(prg_name,prg_userid) values('program 4',1);
insert into tbl_program(prg_name,prg_userid) values('program 5',2);
insert into tbl_program(prg_name,prg_userid) values('program 6',2);
insert into tbl_program(prg_name,prg_userid) values('program 7',3);
Så laver jeg ellers min query. Den kan sagtens optimeres, da jeg bruger en group by. Den er som regel lidt langsom... Her er i al fald et eksempel:
SELECT u.usr_id, u.usr_name,count(p.prg_id) as amount
FROM tbl_user AS u
LEFT JOIN tbl_program AS p ON p.prg_userid = u.usr_id group by u.usr_id,u.usr_name order by amount DESC
udskriften bliver følgende: (igemme phpMyAdmin)
usr_id usr_name amount
1 Jimmi 4
2 Palle 2
3 Vibeke 1
Håber at du kunne bruge det til noget.