Avatar billede Slettet bruger
16. februar 2003 - 15:13 Der er 24 kommentarer og
2 løsninger

Tæl indhol i kolonne (SQL)

Hej eksperter.

Jeg har et database hvor jeg har en tabel kaldet login.
Der har jeg en kolonne som normalt er tom. Men hvis folk bliver oprettet skriver den vedkommendes nick i denne kolonne.

Nu kunne jeg godt tænke mig at vide hvor mange brugere der egentlig er i mit system.

Men hvordan gør jeg det?

Som standart er der 80 rækker i kolonnen, og den skal kun tælle de felter hvor der er indhold i.

Og et lille tillægs spørgsmål.
Ligesom i menuen til venstre her på eksperten. Kan man se de nyeste spørgsmål. Hvordan kan jeg eventuelt gøre dette med de nicks jeg har i min kolonne ? så den viser de 5 sidste der er tilmeldt ?
Avatar billede postndk Nybegynder
16. februar 2003 - 15:17 #1
>Kan man se de nyeste spørgsmål. Hvordan kan jeg eventuelt gøre dette med de nicks jeg har i min kolonne ? så den viser de 5 sidste der er tilmeldt ?

select navn from login ORDER BY id DESC limit 5;

select count(id) as antal from login;
Avatar billede Slettet bruger
16. februar 2003 - 15:17 #2
1. Select Count(id) as result from tabel
2. Selext TOP 5 id FROM tabel ORDER BY id DESC
Avatar billede Slettet bruger
16. februar 2003 - 15:18 #3
skulle selvfølgelig være select i begge to :)
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 15:21 #4
SELECT count(id) AS total FROM $tb WHERE nick != ''
Avatar billede postndk Nybegynder
16. februar 2003 - 15:22 #5
mon ikke det hører til i mysql , du skriver jo også selv (sql) .. ;o)
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 15:23 #6
og til tillægs spørgs målet;
SELECT * FROM $tb WHERE nick != '' DESC LIMIT 5
Avatar billede Slettet bruger
16. februar 2003 - 15:23 #7
tjo postndk ...

Men mit problem ligger også i hvordan jeg udskriver det i php :-)
derfor smed jeg det i denne kategori.

Jeg vil gerne have nogle hele eksempler på hvordan jeg også udskriver det :))
Avatar billede Slettet bruger
16. februar 2003 - 15:27 #8
enragedbudda .. kan du give et helt eksempel på koderne.
Hvordan mysql_query skal se ud, og hvordan jeg udskriver dem ?
Avatar billede postndk Nybegynder
16. februar 2003 - 15:31 #9
<?
$q = mysql_query("SEÆECT count(id) as result from tabel");
$r = mysql_fetch_array($q);
echo "Der er ".$r[result]." brugere";
?>

<?
echo "De 5 nyeste brugere i systemet";
$q = mysql_query("SELECT navn from login order by id desc limit 5");
while ($r = mysql_Fetch_array($q)) {
echo $r[navn]."<br>";
}
?>

noget a'la dette.
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 15:38 #10
cybermann: du skal sætte en kollonne ind i din tabel så der er en der hedder date... Men hvorfor har du 80 rækker? det er da lidt dumt?!?!
Avatar billede Slettet bruger
16. februar 2003 - 15:47 #11
postndk -> ja det er sådan det skal se ud :) men når jeg smider dette ind og retter navn om til nick. så får jeg fejlen:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

enragedbudda -> hvorfor skal jeg indsætte en kollonne der hedder date?
Jeg har 80 rækker nedad, da det er et bookingsystem jeg roder med. Og da jeg har en anden kollonne med f.eks. Billetnr. og der skal der jo være 80 pladser.
Og når folk tilmelder sig smider den deres email ind i kollonnen med emails.
Avatar billede postndk Nybegynder
16. februar 2003 - 15:48 #12
du har rettet den stavefejl jeg lavede i den første query ? der skal stå SELECT og ikke SEÆECT.. ;o)
Avatar billede Slettet bruger
16. februar 2003 - 15:50 #13
jeps den har jeg rettet postndk :)

Min kode ser nu sådan ud:

<?

include("mysql_kk.inc");

$q = mysql_query("SELECT count(id) as result from tabel");
$r = mysql_fetch_array($q);
echo "Der er ".$r[result]." brugere";
?>

<BR><BR><BR>

<?
echo "De 5 nyeste brugere i systemet";
$q = mysql_query("SELECT nick from login order by id desc limit 5");
while ($r = mysql_Fetch_array($q)) {
echo $r[nick]."<br>";
}
?>
Avatar billede Slettet bruger
16. februar 2003 - 15:55 #14
Og min struktur ser sådan ud:

#
# Struktur dump for tabellen 'login'
#

DROP TABLE IF EXISTS login;
CREATE TABLE login (
  id int(11) NOT NULL auto_increment,
  billetnr tinytext NOT NULL,
  kode tinytext NOT NULL,
  plads varchar(11) NOT NULL DEFAULT '',
  email tinytext NOT NULL,
  tiden timestamp(14) NULL,
  nick varchar(41) NOT NULL default '',
  KEY id (id)
);
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 15:57 #15
ahh... et booking system :)... jeg troede det var et almindeligt bruger system...
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 16:01 #16
<?
echo "De 5 nyeste brugere i systemet";
$q = mysql_query("SELECT nick from login order by id desc limit 5");
while ($r = mysql_Fetch_array($q)) {
echo $r[nick]."<br>";
}
?>

Skal ændres til:

<?
echo "De 5 nyeste brugere i systemet";
$q = mysql_query("SELECT * FROM login ORDER BY billetnr ASC LIMIT 5");
while ($r = mysql_Fetch_array($q)) {
echo $r[nick]."<br>";
}
?>

Så tar den de 5 højheste billetnr's :)
Avatar billede Slettet bruger
16. februar 2003 - 16:01 #17
jeps .. det kan hurtig blive noget indviklet noget :/

okay, jeg fandt selv fejlen i min kode fra før.
og rettede det lidt til med hjælp fra både enragedbudda og postndk

Den ser nu sådan ud:

<?

include("mysql_kk.inc");

$q = mysql_query("SELECT count(id) as nick from login WHERE nick != ''");
$r = mysql_fetch_array($q);
echo "Der er ".$r[nick]." brugere";
?>

Men de 5 nyeste tilmeldte kan jeg stadig ikke få til at fungere.
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 16:05 #18
se mit indlæg :D
Avatar billede Slettet bruger
16. februar 2003 - 16:10 #19
Se nu begynder det at ligne noget :))
Men den tager ikke de 5 sidste tilmeldte. Den tager blot de 5 første :/
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 16:16 #20
nå okay :)... Så skal vi have fat i noget datoværk :)...
Avatar billede enragedbudda Nybegynder
16. februar 2003 - 16:17 #21
men det jeg skrev tog de fem største billetnumre!
Avatar billede Slettet bruger
16. februar 2003 - 16:20 #22
billet nummerne starter ved 100 og op til 179

Men det med tid kunne da fungere :))
Jeg har jo allerede et felt hvor den har skrevet tid i et timestamp.

Men sql er ikke lige mit felt :/
Avatar billede Slettet bruger
16. februar 2003 - 16:38 #23
Har du en ide til hvordan det kunne klares enragedbudda ? :)
Avatar billede Slettet bruger
16. februar 2003 - 17:07 #24
Okay jeg prøvede for sjov skyld at ændre det til id istedet for billetnr
Koden ser nu sådan ud, men det sidste med nyeste brugere virker stadig ikke.

<?

include("mysql_kk.inc");

$q = mysql_query("SELECT count(id) as nick from login WHERE nick != ''");
$r = mysql_fetch_array($q);
echo "Der er ".$r[nick]." brugere";

echo " <BR><BR><BR>";


echo "De 5 nyeste brugere i systemet<BR>";
$q = mysql_query("SELECT * FROM login ORDER BY id ASC LIMIT 5");
while ($r = mysql_Fetch_array($q)) {
echo $r[nick]."<br>";
}
?>
Avatar billede Slettet bruger
16. februar 2003 - 19:03 #25
Fandt selv ud af det. Du foreslog at benytte noget med tid, så jeg bruger timestamp til at vælge efter :))

Koden ser nu sådan ud:

<?

$resultat = mysql_query("select * from login ORDER BY tiden DESC LIMIT 2");
while($row = mysql_fetch_array($resultat)) {

echo " $row[nick]<BR> ";

}

?>

Du får 40 points enragedbudda, da du kom med de bedste foreslag.
Men postndk får de sidste 20 da han hjælp med til min første spørgsmål :))

Tak for hjælpen gutter :D
Avatar billede enragedbudda Nybegynder
18. februar 2003 - 22:08 #26
sry jeg ikke svarede :)... har næsten ikke været ved computeren her de sidste 2 dage så jeg har ikke været så aktiv på exp :)
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