Zur Navigation

sql abfrage

1 tobi

hallo zusammen,

ich habe wohl ein kleines blackout, ich möchte die aktuelle anzahl meiner einträge in der db ermitteln und ausgeben. leider stimmen die beiden ausgaben nicht mit der tatsächlichen anzahl überein: folgendes wird per echo ausgegeben:
result1 = Resource id #10
result2 = Resource id #12

in ppc_anmeldungen_samstag sind aber 13 einträge vorhanden und
in ppc_anmeldungen_sonntag sind aber 14 einträge

   $sql1 = "SELECT Count(*) FROM ppc_anmeldungen_samstag";
   $db_erg1 = mysql_query( $sql1 );
   if ( ! $db_erg1 )
   {
   die('Ungültige Abfrage: ' . mysql_error());
   }

   $result1 = mysql_query( $sql1 );

   echo "$result1\n";   
   
   $sql2 = "SELECT Count(*) FROM ppc_anmeldungen_sonntag";
   $db_erg2 = mysql_query( $sql2 );
   if ( ! $db_erg2 )
   {
   die('Ungültige Abfrage: ' . mysql_error());
   }

   $result2 = mysql_query( $sql2 );

   echo "$result2\n";


woran kann dies liegen?

mfg tobi

26.05.2010 16:58

2 Jörg Kruse

mysql_query() gibt eine Resource mit den Ergebnissen zurück; mit z.B. mysql_fetch_row() kannst du daraus einzelne Datensätze extrahieren.

26.05.2010 17:17

3 tobi

$abfrage1 = "SELECT id FROM ppc_anmeldungen_samstag";
$ergebnis1 = mysql_query($abfrage1);
while($row1 = mysql_fetch_object($ergebnis1))
   {
   echo "$row1->id";
   }

$abfrage2 = "SELECT id FROM ppc_anmeldungen_sonntag";
$ergebnis2 = mysql_query($abfrage2);
while($row2 = mysql_fetch_object($ergebnis2))
   {
   echo "$row2->id";
   } 

nun gibt er mir alle id´s hintereinander aus 1234567891011 ...

ich würd gerne die komplette anzahl haben, also wenn 14 einträge sind, dass er nur die zahl 14 ausgibt.

bzw. mein eigentliches ziel ist:
ausgabe 1 soll ausgeben, wieviele plätze nohc frei sind und abfrage 2 auch, sind aber 2 verschiedene tage, daher auch 2 verschieden tabellen und abfragen.

also tag 1 max: 128 und tag 2 max. 192
wenn dann an tag 1 beispielsweise 14 einträge ind der db sind, dann sind nur noch 114 plätze frei, welches auch ausgegeben werden soll

26.05.2010 17:27

4 Jörg Kruse

Ja, du hättest bei der Abfrage mit dem COUNT() bleiben sollen. Eine while Schleife benötigst du dann auch nicht, weil ja nur ein Datensatz abgefragt wird. Den kannst du in diesem Fall einfach mithilfe von list() zuweisen:

$sql1 = "SELECT Count(*) FROM ppc_anmeldungen_samstag";
$result1 = mysql_query( $sql1 );
list($count1) = mysql_fetch_row($result1);
echo $count1;

Alternativ kannst du aber auch die IDs abfragen und die zurückgegebenen Datensätze mit mysql_num_rows() zählen:

$abfrage1 = "SELECT id FROM ppc_anmeldungen_samstag";
$ergebnis1 = mysql_query($abfrage1);
$anzahl1 = mysql_num_rows($ergebnis1);

Der erste Code würde ich vorzuziehen, da die Datenbank hier nur eine einzelne Zahl zurückgeben muss

26.05.2010 17:59

5 tobi

kann das so gehen?
$freie_plaetze1 = $max_anzahl_samstag - $count1;
denn ich bekomme immer einen
syntax error, unexpected T_VARIABLE

$sql1 = "SELECT Count(*) FROM ppc_anmeldungen_samstag";
$result1 = mysql_query( $sql1 );
list($count1) = mysql_fetch_row($result1);
//echo $count1;

$max_anzahl_samstag = 128
$freie_plaetze1 = $max_anzahl_samstag - $count1;
echo $freie_plaetze1;


$sql2 = "SELECT Count(*) FROM ppc_anmeldungen_sonntag";
$result2 = mysql_query( $sql2 );
list($count2) = mysql_fetch_row($result2);
//echo $count2;

$max_anzahl_sonntag = 192
$freie_plaetze2 = $max_anzahl_sonntag - $count2;
echo $freie_plaetze2;

26.05.2010 19:00

6 Rudy

Da fehlt auch ein Semikolon in Zeile 6.

26.05.2010 19:09

7 tobi

danke, vollkommen übersehen.

PS. nicht nur in zeile 6, sondern auch ein wenig tiefer ( jeweils bei meinen maximal_angaben)

26.05.2010 19:18

8 tobi

so hi,

ich nochmal. habe eine neue abfrage:
$sql = "
SELECT id, nachname, vorname, verein, timestamp FROM ppc_anmeldungen_sonntag WHERE turnierklasse = '4' AND '5' ORDER BY timestamp";

die frage die sich mir stellt, ist '4' AND '5' so möglich? denn er liefert mir nur inhalte von 4 aus, ich möchte aber inhalte von 4 und 5

danke

EDIT: nach einigem experimentieren bin ich darauf gekommen, ich weiß zwar nciht ob es korrekt ist, jedenfalls gibt er mir die einträge aus
... WHERE turnierklasse = '4' OR turnierklasse = '5' ...

27.05.2010 22:44 | geändert: 27.05.2010 23:05

9 Jörg Kruse

Ja so ist es korrekt - du möchtest ja Datensätze selektieren, in denen die Turnierklasse '4' oder '5' ist; außerdem müssen Bedingungen in SQL vollständig ausgeschrieben werden - sie werden nicht wie in natürlichen Sprachen aus der vorangehenden Bedingung ergänzt

27.05.2010 23:21

10 tobi

super - freu ;)

wenn ich jetzt bei einer anderen Abfrage nach dem Geschlecht unterteilen möchte, und nur möchte dass z.B nur die mänlichen Spieler aufgelistet werden, wie geht das? mit Like oder so irgendwas?

$sql = "
SELECT id, nachname, vorname, verein, geschlecht, timestamp FROM ppc_anmeldungen_sonntag WHERE turnierklasse = '2' LIKE 'maennlich 'ORDER BY timestamp";

28.05.2010 16:51