Gå til innhold

liste over ti mest brukte navn i mysql kolonne


Anbefalte innlegg

ønsker å lage en ti på toppliste over mest brukte ord i kolonnen "navn". altså et script som teller antall ganger hver navn forekommer, og lister de ti mest brukte:

 

// TOPP-TI BRUKERE
$query3 = "SELECT * FROM dagbok WHERE publiser = 0 LIMIT 0,10"; 
$result3 = mysql_query($query3); 
$number3 = mysql_num_rows($result3); 

 

...så kom jeg ikke lenger... sitter fast :yes:

Lenke til kommentar
Videoannonse
Annonse
Enjoy!

 

Nyttig, men ergelig at Mysql ikke lar deg sortere internt i hver "GROUP BY"-kollaps, så enkelte ting må man gjøre i to queries.

Hva mener du?

 

Hvis du har en tabell f.eks.

Bilkjøp:

id navn bil dato_kjøpt

 

og vil ha ut en gruppert liste over biler personene har kjøpt:

SELECT * FROM Bilkjøp

ORDER BY navn, dato_kjøpt

Dette vil gruppere på navn, og sortere internt i gruppene på når bilen ble kjøpt.

 

Skal du bare ha ut nyeste bil hver person har:

SELECT navn,bil, MAX(dato_kjøpt)

FROM Bilkjøp

GROUP BY navn

ORDER BY navn

Lenke til kommentar

prøv det du foreslår, du vil sannsynligvis se at det ikke går, hvis ikke skal jeg slenge opp en demo.

 

radene internt i GROUP BY kollapsen vil *ikke* sorteres, ORDER BY påvirker bare radene som faktisk returneres av queriet.

 

Det gjør at man ikke kan både ta ut statistiske data som COUNT, MAX, MIN, etc... og i tillegg individuelle data basert på sortering internt, ved hjelp av ett query.

 

Individuelle data fra en enkelt rad fra GROUP BY kollapsen er tilgjengelig, problemet er at man ikke kan velge hvilken man vil ta ut, så man får en tilfeldig rad basert på en eller annen intern sortering. Ubrukelig mao.

Lenke til kommentar

Jeg korrigerte min forige post mens du skrev, sorry.

 

Det jeg skriver øverst, "å sortere internt i en GROUP BY kollaps" sier egentlig det jeg vil.

 

Jeg vil ha ut både statistiske data, sånn som jeg skrev, og individuelle data fra en enkelt rad (alle rader har individuelle data (selvsagt) men jeg vil ha ut data fra en spesiell rad i kollapsen, i tillegg til statistiske data for hele kollapsen)

 

Dette *er* et velkjent problem, i Mysql 4.0 løser man det med et sub-query inni queriet.

 

Det finnes et juksetriks for mysql 3 som er stygt, men som fungerer, husker ikke link, men det står i dokumentasjonen på mysql.com

Lenke til kommentar

ja, max() og min() har ikke noe med sorteringen av radene å gjøre.

 

Jeg skal vise mitt problem (skjedde for en uke siden, derfor jeg har dette klart for meg)

 

Jeg har laget et forum, hvor jeg har en tabell med alle postene i.

 

forenklet ser tabellen slik ut:

emne  melding  forfatter  tid  id  trad_starter_id

 

feltene sier seg stor sett selv, trad_starter er id til den posten som starter tråden som posten befinner seg i.

 

(litt mer invilket enn som så, men prinsippet er det samme)

 

på framsiden av forumet lister jeg opp alle trådene i forumet, jeg viser også antall svar i tråden og dato for nyeste post i tråden, mitt query blir da f.eks:

 

SELECT *,count(*) as antall_svar, max(tid) as nyeste_tid GROUP BY trad_starter_id ORDER BY nyeste_tid DESC LIMIT 20

 

Da vil jeg få ut antall svar på hver tråd, og jeg vil få ut tidspunkt for nyeste post, hvilket det også sorteres på, inga problem så langt.

 

Men det er naturlig å også vise emne og forfatter for den øverste posten i hver tråd også, dette kan jeg imidlertid ikke hente ut fra query'et over.

 

Jeg kan hente ut emne og forfatter, (idet jeg har med "select *,[...]"), men i hver rad vil det nå "ligge" et varierende antall poster som hører til samme trådstarter-post, men bare en av disse radene vil fylle feltene "emne" og "forfatter" (og "melding") i query'et mitt. Men ikke nødvendigvis den "øverste" posten (som er den jeg er ute etter)

 

Jeg måtte med andre ord utfra "trad_starter_id" hente ut denne posten i etterkant og fra den hente emne og forfatter, istedet for å "få med dette på kjøpet" på den første spørringa.

 

Håper dette var forståelig.

Lenke til kommentar

Ikke jeg heller... får spørre noen som skriver SQL-compilere til databaser...

 

Alternativ metode fra bruker på mysql.com:

Bilkjøp:

id navn bil dato_kjøpt

 

SELECT DISTINCT navn,bil,dato_kjøpt
FROM Bilkjøp LEFT JOIN Bilkjøp AS B2 ON Bilkjøp.navn=B2.navn AND Bilkjøp.dato_kjøpt < B2.dato_kjøpt
WHERE B2.dato_kjøpt IS NULL
ORDER BY navn;

 

Dvs finn den raden for hver person som har største dato og ta med den

(her kan vel ikke aggregeringsfunksjoner brukes da....)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...