Avatar billede alaflam Nybegynder
14. oktober 2004 - 19:50 Der er 24 kommentarer og
2 løsninger

ang. sql sætning !

Hej,

Jeg har en lille problem vedr. sql sætning.

Jeg har 2 tabler.

TABLE (1) *> id | name
TABLE (2) *> id | tlf

jeg henter navne fra table 1, og vil ordrer dem på hvor mange tlf man har hver bruger.

dvs.

en name, kan have flere, den der har mest tlf navn, skal stå først :)

Jeg håber nogen kan hjælpe mig med den lille problem jeg har, så jeg kan arbejde videre med min kode :)

På forhånd tak forhjælpen.
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:01 #1
SELECT table1.name FROM table1, table2 WHERE table1.id = table2.id ORDER BY SUM(table2.tlf) DESC
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:01 #2
Skulle nok være COUNT
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:05 #3
jeg prøver 2sek :)
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:11 #4
Jeg ville lave tabellerne således:

TABLE (1) *> id | name
TABLE (2) *> id | name_id | tlf

Relationen skabes i tabel2.name_id = tabel1.id (id er normalt et "ukontrollabelt" fortløbent nummer, og sætte to id'er til at være relationer på hinannden, ser jeg som et problem)

SQL til at få navne og det antal tlf de har:

SELECT tabel1.Name, COUNT(tabel2.id) Tlfnumre FROM tabel1 LEFT JOIN tabel2 ON tabel2.name_id = tabel1.id GROUP BY tabel1.id
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:12 #5
Og så en mere rigtig en her:
SELECT table1.name, COUNT(table2.tlf) AS antal FROM table1, table2 WHERE table1.id = table2.id GROUP BY table1.name ORDER BY antal DESC
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:13 #6
og lige med en ORDER BY:

SELECT tabel1.Name, COUNT(tabel2.id) Tlfnumre FROM tabel1 LEFT JOIN tabel2 ON tabel2.name_id = tabel1.id GROUP BY tabel1.id ORDER BY Tlfnumre DESC
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:21 #7
http://www.w3schools.com/sql/sql_groupby.asp

hvordan får jeg dem trukket ud så ??

da de har begge 2 navn ID, hvordan vil den vide hvilken en jeg trækker ud af databasen ??
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:22 #8
hindu_skp >> jeg bliver nødt til (!) at kritisere din SQL.. i dit tilfælde vil hans tabel2, have rækker hvor id indeholder det samme tal. Med andre ord mister han en unik column, hvilket id typisk er - af mange gode grunde !-)
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:23 #9
alaflam  >> hvis du bruger min model burde du ikke have det problem.

Kan du være lidt mere præcis hvad du nu ønsker at trække ud? (i øvrigt off-topic så vidt jeg kan se)
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:25 #10
Så vidt jeg ved er der intet galt med en delt primær nøgle...
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:25 #11
fixxxer > jeg kan ikke rigtige forstå din sql, hvorfor tæller du table2.id når du burdt tælle hvor mange name_id + hvor kommer Tlfnumre fra når du ikke bruger AS?
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:25 #12
næh det er der vil ikke hvis man gerne vil miste sin unikke-column
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:26 #13
fixxxer, jeg har giver dig præcis hvad jeg vil have hjælp med.
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:27 #14
Udfra hvad alaflam har skrevet, blir der nødt til at være en delt primær nøgle.

Jeg har lige testet min sql sætning, og den skriver:
jens - 5
kaj - 3
peter - 1

Er det ikke det du vil ha ?
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:28 #15
alaflam >> fordi jeg group by på tabel1.id og med denne relation (tabel2.name_id = tabel1.id) vil tallet COUNT(tabel2.id) give antallet af telefon numre, på hver person i tabel1.
Det virker og er testet.. og hvis du spørger mig den "pæneste" måde at gøre det på.

Hvad angår AS er dette et valgfrit element. AS er underforstået mellem "COUNT(tabel2.id)" og "Tlfnumre"
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:31 #16
LEFT JOIN og FROM table1, table2 WHERE table1.id = table2.id koster det samme, så det er kun en smagssag, hvordan man gør
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:33 #17
alaflam >> Når jeg spørger dig om du ikke kan være lidt mere præcis, er det fordi jeg vil vide om du vil trække navne ud + det antal tlf. numre hver person har tilknyttet.
Det er hvad min SQL gør nu.

Eller om du vil have udtrukket en kombination hvor der for hver person er listet hans/hendes tlf.numre.
Det kan laves med lidt PHP.
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:33 #18
table1.name, COUNT(table2.tlf)

er det kun dem jeg kan udskrive fordi når jeg prøver at udskrive postnr, så kan jeg ikke ??
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:35 #19
hindu_skp >> det er muligt at det koster det sammen, men jeg kan ikke forstå hvorfor du vil ofre din id-række's unikke egenskab i tabel2?
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:35 #20
table1.name, table1.postnr, COUNT(table2.tlf)
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:36 #21
Hvor kom postnr fra???
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:36 #22
fixxxer: Det er ikke mig der har lavet tabellen. Jeg ville altid lave et andel felt der refferere til id i table1
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:39 #23
fixxer, jeg giver bare et ekspempel, hvad hvis jeg nu ligger efternavn, skal jeg også tilføje det ???, det bliver så en laaaaang sql sætning til sidst ??


og i må gerne begge 2 svar :)
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 20:40 #24
Ja, du skriver bare de felter du vil ha, separeret med komma
Avatar billede fixxxer Nybegynder
14. oktober 2004 - 20:42 #25
du kunne måske også bare sige tabel1.*, de_andre_felter+count()
Avatar billede alaflam Nybegynder
14. oktober 2004 - 20:43 #26
jeg siger mange tak til begge to og til dem der står bag siden :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester