Gå til innhold

Anbefalte innlegg

Heisann!

 

Leter etter en enkel funksjon til å telle hvor mange innlegg man har i en allerede eksisterende mysql db.

 

altså..

 

visuelt sett: det er xxx påmeldt. (hvor xxx skal tilsvare antall påmeldte)

 

Noen som har no enkelt eventuelt vanskelig skript for det? burde vel være ganske enkelt vil jeg tro.

 

*forresten utrolig digg design på siden her nå, behaglige farger. Lenge siden jeg har vært her.

Endret av Murty
Lenke til kommentar
Videoannonse
Annonse
SELECT COUNT(*) AS totalt FROM tabellnavn

Den spørringen finner alle rader fra tabellen "tabellnavn" og kaller resultatfeltet for "totalt" :)

5240532[/snapback]

 

hvor setter jeg inn denne koden?

 

*fant det ut.*

Endret av Murty
Lenke til kommentar
SELECT COUNT(*) AS totalt FROM tabellnavn

Den spørringen finner alle rader fra tabellen "tabellnavn" og kaller resultatfeltet for "totalt" :)

Løsningen din er upåklagelig, men jeg kommer likevel med litt tilleggsinformasjon som kanskje kan være av interesse for noen, nemlig to varianter som i hvert fall på noen databaseimplementasjoner oppfører seg noe annerledes:

 

SELECT COUNT(1) FROM tabell

Denne yter på en del implementasjoner bedre enn COUNT(*). På nyere implementasjoner av databaser skal dette ikke være noe problem.

 

SELECT COUNT(kolonne) FROM tabell

Jeg vet ikke hvordan denne er på MySQL, men på Microsoft SQL Server ignorerer COUNT(kolonne) rader der kolonne er NULL.

Lenke til kommentar
Det er relativt vanlig å kjøre count på primary key'n... Hvis du har en primary key som er null så driver du med noe rart.. ;)

5245060[/snapback]

 

Har a en primary key med auto_inc men den endres jo ikke hvis jeg sletter oppføringer... derfor må jeg kunne telle entries.., Men alt i orden nå!

Lenke til kommentar
Har a en primary key med auto_inc men den endres jo ikke hvis jeg sletter oppføringer... derfor må jeg kunne telle entries.., Men alt i orden nå!

Du teller antall forekomster av PK, og derfor er verdien av den irrelevant. Den kan om så være en GUID eller en helt annen tilfeldig eller semitilfeldig verdi.

Lenke til kommentar
SELECT COUNT(kolonne) FROM tabell

Jeg vet ikke hvordan denne er på MySQL, men på Microsoft SQL Server ignorerer COUNT(kolonne) rader der kolonne er NULL.

5240945[/snapback]

 

I MySQL, i alle fall når du bruker MyISAM- eller InnoDB-tabeller, hentes resultatet av denne spørringa ved ein diskaksess (eller rett frå minnet, om tabellen er lasta inn allereie). Dei aller fleste databasar lagrar antallet rader i ein tabell sammen med tabelldefinisjonen. :)

Lenke til kommentar
I MySQL, i alle fall når du bruker MyISAM- eller InnoDB-tabeller, hentes resultatet av denne spørringa ved ein diskaksess (eller rett frå minnet, om tabellen er lasta inn allereie). Dei aller fleste databasar lagrar antallet rader i ein tabell sammen med tabelldefinisjonen. :)

Jeg tolker det da dithen at count(*), count(kolonne) og count(1) alltid gir et samme svaret i MySQL, stemmer det? Personlig ser jeg i hvert fall fordelen av å kunne bruke count(kolonne) for å finne antall rader i en tabell der det er en verdi av kolonne. Hvis vi for eksempelets skyld ikke tenker på normalisering, kan følgende da være en fornuftig spørring:

SELECT count(OrgNr) FROM Kunder

Dette vil med Microsoft SQL Server gi antallet kunders om har et Organisasjonsnummer, altså bedrifter.

Lenke til kommentar
Jeg tolker det da dithen at count(*), count(kolonne) og count(1) alltid gir et samme svaret i MySQL, stemmer det? Personlig ser jeg i hvert fall fordelen av å kunne bruke count(kolonne) for å finne antall rader i en tabell der det er en verdi av kolonne. Hvis vi for eksempelets skyld ikke tenker på normalisering, kan følgende da være en fornuftig spørring:

SELECT count(OrgNr) FROM Kunder

Dette vil med Microsoft SQL Server gi antallet kunders om har et Organisasjonsnummer, altså bedrifter.

5265582[/snapback]

 

MySQL er litt ekkel på det området. COUNT(kolonne) gir tilbake antallet ikke-NULL-rader, mens COUNT(*) returnerer antallet rader (uansett om de er NULL eller ikke). Så, dersom du har en kolonne spesifisert som NOT NULL vil de gi samme svar, men COUNT(*) vil være raskere enn COUNT(kolonne) om du bruker MyISAM-tabeller.

 

I ditt eksempel vil da COUNT(kolonne) være det mest aktuelle, om du bare vil ha antallet bedrifter som har organisasjonsnummer. Viss du vil ha totalt antall bedrifter må du bruke COUNT(*).

 

Eg tok nok feil når eg sa at dette gjaldt InnoDB i går, siden InnoDB ikke kan gjøre den typen caching av data på grunn av transaksjonsstøtten.

 

En kort beskrivelse av COUNT()-oppførselen finnes i MySQL-dokumentasjonen.

Lenke til kommentar

å kjøre

 

SELECT COUNT(primary_key) FROM table

 

skal fungere samme hva, så sant du ikke bruker composite keys, noe som var ut omkring 1990 :p

 

Primary key'ene i databasene jeg bruker har ihvertfall NOT NULL constraint på seg..

 

I postgres så vil ovennevnte spørring hente antallet uten å kjøre en sequential scan på tabellen, mao så tar det noen få millisekunder å hente ut antallet, selv om du har millioner av rader. Ser ikke bortifra at den henter antallet fra primary key indeksen - er jo ikke usannsynlig at den sitter med antallet :)

Lenke til kommentar
å kjøre

 

SELECT  COUNT(primary_key) FROM table

 

skal fungere samme hva, så sant du ikke bruker composite keys, noe som var ut omkring 1990 :p

Hvorfor mener du composite keys er ut? Dersom du har to numeriske verdier som uansett må være unike, og derfor også unikt identifiserer en rad i tabellen, så ser jeg ofte liten vits i å innføre en ekstra kolonne for å unngå en composite key. Unntaket er når det er en del tabeller som skal ha foreign key mot denne.

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...