Visa hur många i en tabell - PHP

Permalänk
Musikälskare

Visa hur många i en tabell - PHP

Hejs

Kan man på nått sätt göra så att man kan se hur många rader det är i en tabell och ha det som en räknare på sidan?

Typ:

56st

Har sökt och letat men inte hittat

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?

Permalänk
Medlem

Javisst, du har kanske ett id, typ "int auto_increment" för varje rad och då kan du köra:

$query = "SELECT id_for_tabellen_eller_annat FROM tabellen"; $query = mysql_query($query); $nummret = mysql_num_rows($query); echo $nummret;

Det ska nog gå att köra på vilken annan kolumn som helst, men * är lite segare än att specificera sig.
//pscs3

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Medlem

$query = "SELECT COUNT(id_for_tabellen_eller_annat) FROM tabellen"; $query = mysql_query($query); echo $nummret;

Till och med,
då räknar den direkt antal rader.

Permalänk
Medlem

samma som ovan fast i en funktion

<?php function get_rows ($table_and_query) { $total = mysql_query("SELECT COUNT(*) FROM $table_and_query"); $total = mysql_fetch_array($total); return $total[0]; } ?>

Permalänk
Musikälskare

Tack för svaren men lyckas inte länka in rätt i koden :/

Har en tabell som heter user och i den ligger

user_id (auto_increment)
name
ip

function get_rows ($user_id) {
$total = mysql_query("SELECT COUNT(*) FROM $user");
$total = mysql_fetch_array($total);
return $total[0];
}

Men det händer inget på sidan

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?

Permalänk
Testpilot
Citat:

Ursprungligen inskrivet av mega_bra
samma som ovan fast i en funktion

Ingen direkt superoptimering men kanske kan vara bra att veta, ska man bara hämta ett värde kan man använda mysql_result()

function get_rows ($table_and_query) { $total = mysql_query("SELECT COUNT(*) FROM $table_and_query"); return mysql_result($total, 0); }

pscs3:s variant är inte att rekommendera då den hämtar alla rader helt i onödan, mysql_num_rows bör bara användas om man verkligen ska hämta rader och vill räkna hur många man hämtat.

Inte heller raggarbosse:s exempel är helt rekommenderat, det är bäst att använda COUNT(*) för då kan MySQL använda valfritt index istället för att tvingas till det man anger, har du inte ett index på det fältet du anger kommer frågan gå mycket långsammare än med ett indexerat fält, * låter då MySQL välja det bästa indexet.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av flashen
Tack för svaren men lyckas inte länka in rätt i koden :/

Har en tabell som heter user och i den ligger

user_id (auto_increment)
name
ip

function get_rows ($user) {
$total = mysql_query("SELECT COUNT(*) FROM $user_id");
$total = mysql_fetch_array($total);
return $total[0];

Men det händer inget på sidan

Om du inte har en tabell som har samma namn som värdet av variabeln user_id så förstår jag att det inte funkar, eller har du en tabell för varje användare?

du är nog snarare ute efter nått i stil med "SELECT COUNT(*) FROM user", eller är jag ute och cyklar? Då räknar den iaf alla rader i tabellen user och det är det du får ut.
den returnerar nog även bara ett tal så mysql_fetch_array() är nog onödig.

alltså:

function get_rows ($user) { $total = mysql_query("SELECT COUNT(*) FROM user"); return $total; }

EDIT: Lyssna på hunden
EDIT igen: Är för trött antar jag, skriver fel i koden -_-

Permalänk
Medlem

Bör man också köra ett COUNT(*)-anrop när man ska kolla efter om databasen är tom? Jag brukar ex. köra som det jag skrev ovan och något liknande:

if(mysql_num_rows($query) == 0){ ... do this }else{ ... do that }

Man lär sig nya saker hela tiden ^^
//pscs3

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Musikälskare

Woho funkar nu

Tack alla!

$query = "SELECT user_id FROM user";
$query = mysql_query($query);
if(mysql_num_rows($query) != 0){
$i = 0;
while($count = mysql_fetch_row($query)){
$i++; }
}
else{
$i = 0;
}

echo $i;

Visa signatur

❀ Monitor: ASUS Swift 27" @ 1440p/165Hz ❀ CPU: Ryzen 7700X ❀ Cooling: Corsair H170i ELITE 420mm ❀ GPU: MSI 3080 Ti SUPRIM X ❀ Memory: Corsair 32GB DDR5 Vengeance ❀ Motherboard: ASUS Crosshair X670E Hero ❀ M.2: Samsung 980 Pro ❀ PSU: Corsair HX1200 ❀ Chassi: Corsair 7000X ❀ Time Spy: 19 340

📷 Mina fotografier
🎧 Vad lyssnar du på just nu?

Permalänk
Medlem

Prova att ta bort fjunarna från "'user'":

SELECT COUNT(*) FROM user

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk
Testpilot
Citat:

Ursprungligen inskrivet av pscs3
Bör man också köra ett COUNT(*)-anrop när man ska kolla efter om databasen är tom?

Om du ändå ska hämta rader, exempelvis poster i en blogg kan du ju kontrollera efteråt hur många rader du fick (eller om du inte fick några) med mysql_num_rows() men om du enbart ska räkna rader och inte hämta dom är COUNT mycket bättre.

Om du kör en vanlig fråga så kommer MySQL använda minne till att spara resultatet i och ska du bara köra en mysql_num_rows() på det är det helt onödigt att slösa minne på att hålla i resultatet som ju kan vara jättemånga rader. Likaså bör man alltid använda LIMIT i MySQL om man bara vill hämta ett visst antal rader istället för att bara sluta skriva ut med hjälp av en räknare i PHP, även här använder du minne i onödan till rader du inte ens ska visa.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

kör såhär:

echo mysql_result(mysql_query("SELECT COUNT(*) FROM user"), 0);

enklaste sättet att åstadkomma en radräkning, samt mycket mer effektivt än det du postade som "fungerade"

Permalänk
Medlem

Lägger väl in min variant också då.

inte optimal men fungerar klockrent.

<?PHP

$sql = 'SELECT * FROM users';
$result = mysql_query($sql);
$antal = mysql_num_rows($result);

?>

Men som hunden på pekat och om man förväntar sig en räkning som kommer bli stor.
Om du har en tabell med antal tusentals rader. DÅ är att använda count() att föredra.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem

Om user_id är en uppräknare så borde

echo mysql_result(mysql_query("SELECT MAX(user_id) FROM user"), 0);

Gå lika bra.

Visa signatur

kill -s SIGCHLD `pidof Kenny`
bash: Oh my god, they killed Kenny
init: You Bastards

Permalänk
Testpilot

BlueEyes: COUNT är alltid att föredra om du enbart ska räkna antal rader, mysql_num_rows används för att räkna antal rader i ett resultat.

houze: Det stämmer ju dock inte om du tagit bort rader i din tabell.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]