Gå til innhold

Hvordan telle hvor mange rader i en database?


Anbefalte innlegg

Videoannonse
Annonse
Skrevet (endret)

Går ut fra du mener en tabell i en mysqldatabase, ikke alle rader i databasen.

 

Forslag 1:

$antall = mysql_result(mysql_query("SELECT count(*) as count FROM tabell"),0,"count");

 

Forslag 2:

$query= mysql_query("SELECT * FROM tabell");
$antall = mysql_num_rows($query);

 

Forslag 3:

$query= mysql_query("SELECT * FROM tabell");
$row = mysql_fetch_row($query);
$antall = $row[0];

 

Edit: Kan svært lite om hastighet og sånt, men bruker du forslag 1 må du sansynligvis ha flere spørringer (dersom du ønsker å hente ut mer informasjon), og da kan det være raskere med forslag 3. Ikke nødvendigvis, men det er et tips :-)

Endret av fjartan
Skrevet

Hmz... når jeg tenker meg litt om, funker egentlig nr 3?

 

$query= mysql_query("SELECT count(*) as count FROM tabell");

$row = mysql_fetch_row($query);

$antall = $row[0];

 

Endret litt på første linje, kanskje det er mer riktig... *tankefull*

  • 3 måneder senere...
Skrevet (endret)

Jeg har personlig alltid brukt mysql_num_rows.

 

stian123:

Dette viser litt forum-statistikk (tatt ut av min egen kode):

<?php
$get_forums = mysql_query("SELECT forum_id FROM forum");
$get_threads = mysql_query("SELECT thread_id FROM threads WHERE thread_id = orig_thread_id");
$get_posts = mysql_query("SELECT thread_id FROM threads");

echo '<b>Statistikk</b><br>';
echo mysql_num_rows($get_forums).' temaer<br>';
echo mysql_num_rows($get_threads).' diskusjoner<br>';
echo mysql_num_rows($get_posts).' innlegg';
?>

Endret av HaZnO
Skrevet (endret)

Det er jo standard mysql_connect().

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); // Oppretter koblingen mot mysql-server'n.
$db_selected = mysql_select_db('forum', $link); // Velger hvilken database den skal håndtere, i mitt eksempel: forum.

// Her er et eksempel fra www.php.net:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
  die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
  die ('Can\'t use foo : ' . mysql_error());
}
?>

URL: http://no.php.net/manual/en/function.mysql-select-db.php

 

Edit: Dette må selvfølgelig plasseres før noen som helst mysql_query() osv.

Om du vil slippe og måtte skrive samme regla hver gang, kan du lagre den i en egen fil, f.eks 'db.php', så slenger du inn

include_once('db.php');

øverst i scriptet ditt.

Endret av HaZnO
Skrevet

require_once("db.inc.php"); er bedre, for hvis scriptet av en eller annen grunn ikke får åpnet filen så stopper scriptet. Resten av scriptet vil jo ikke virke likevel siden den er avhengig av kobling mot databasen. :)

  • 4 måneder senere...
Skrevet
Går ut fra du mener en tabell i en mysqldatabase, ikke alle rader i databasen.

 

Forslag 1:

$antall = mysql_result(mysql_query("SELECT count(*) as count FROM tabell"),0,"count");

 

Denne er svært rask, siden den kan benytte seg av lagret informasjon om tabellen, slik at det bare blir ett diskoppslag for å svare på spørringen.

 

Om du velger å benytte en GROUP BY-klausul, og å kjøre COUNT(kolonne) i stedet, vil den fremdeles være svært rask, om du har en indeks på kolonnen (eller kolonnene) du kjører GROUP BY med.

 

Forslag 2:

$query= mysql_query("SELECT * FROM tabell");
$antall = mysql_num_rows($query);

 

Denne er treig. Først og fremst må databasen hente ut hele tabellen fra disk, og tenk deg en tabell på noen gigabyte (vi har en slik tabell i databasen for forumet). Denne tabellen må så overføres fra databasen til PHP-skriptet, en prosess som bruker tabellens størrelse ganger 2 i minnebruk. Så må PHP-skriptet telle over alle radene i resultatet, noe som kan ta mye tid dersom tabellen er stor.

 

Denne vil være mye treigere enn SELECT COUNT(*) uansett størrelsen på tabellen, fordi SELECT COUNT(*) kan lese resultatet direkte fra disken.

 

Forslag 3:

$query= mysql_query("SELECT COUNT(*) AS count FROM tabell");
$row = mysql_fetch_row($query);
$antall = $row[0];

3967852[/snapback]

 

Eg endra denne slik som du gjorde litt lenger nede. Denne vil være like rask som nummer 1.

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