SQL-Querys optimieren!?

Hallo,

ich habe eine Frage bezüglich der SQL-Abfrage ich habe jetzt in meinen PHP Code folgendes:

PHP:
$query = "SELECT * FROM stunden WHERE userid='".$_SESSION['usersqlid']."'";
$result = mysql_query($query, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$num = mysql_num_rows($result);

$querylocked = "SELECT * FROM stunden WHERE userid='".$_SESSION['usersqlid']."' AND status='Beendet'";
$resultlocked = mysql_query($querylocked, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$numlocked = mysql_num_rows($resultlocked);

$querycalculated = "SELECT * FROM stunden WHERE userid='".$_SESSION['usersqlid']."' AND status='Berechnet'";
$resultcalculated = mysql_query($querycalculated, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$numcalculated = mysql_num_rows($resultcalculated);

$queryinwork = "SELECT * FROM stunden WHERE userid='".$_SESSION['usersqlid']."' AND status='in Arbeit'";
$resultinwork = mysql_query($queryinwork, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$numinwork = mysql_num_rows($resultinwork);

$querynew = "SELECT * FROM stunden WHERE userid='".$_SESSION['usersqlid']."' AND status='Neu'";
$resultnew = mysql_query($querynew, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$numnew = mysql_num_rows($resultnew);

Ich brauche die mysql_num_rows(); unterschiedlicher Statusse aus einer Tabelle.

Gibt es eine Möglichkeit alle Querys zu einem zusammen zufassen und in variabeln zu unterteilen?

Gruß
 
Nein, leider kann ich damit gar nichts anfangen.

Vielleicht stelle ich die Frage neu. Ich habe 5 Querys aus denen ich 5 mysql_num_rows abfrage und in 5 PHP Variabeln lege. Wie kann ich das mit einem SQL-Query machen der mit alle Statusse abfragt und in 5 PHP Variabeln ablegt?


Gruß
 
Beckersbesters, brainsucker hat dir bereits die Lösung geben und diese funktioniert garantiert und ist das perfomanteste, was du finden kannst

(MySQL-Optimierung ist mein Lieblingsgebiet)
 
Hallo,

Das könnte man auf mehrere Arten machen... die eine wurde schon gezeigt, die andere steht unten.. (wobei diese Variante sicherlich um ein vielfaches langsamer ist als die Group by Variante hat aber den "Vorteil", das das Ergebnis in einer Zeile vorliegt... also wer's braucht ;-)

SQL:
create table counttest(id int, type int, value int);

insert into counttest values (1,1,1);
insert into counttest values (2,1,5);
insert into counttest values (3,2,9);
insert into counttest values (4,2,7);
insert into counttest values (5,2,7);
insert into counttest values (6,2,7);
insert into counttest values (7,2,7);
insert into counttest values (8,3,100);

mysql> select * from counttest;
+------+------+-------+
| id   | type | value |
+------+------+-------+
|    1 |    1 |     1 |
|    2 |    1 |     5 |
|    3 |    2 |     9 |
|    4 |    2 |     7 |
|    5 |    2 |     7 |
|    6 |    2 |     7 |
|    7 |    2 |     7 |
|    8 |    3 |   100 |
+------+------+-------+
8 rows in set (0.00 sec)

mysql> select type,count(*) from counttest group by type;
+------+----------+
| type | count(*) |
+------+----------+
|    1 |        2 |
|    2 |        5 |
|    3 |        1 |
+------+----------+
3 rows in set (0.00 sec)

mysql> select count(if(type=1,1,null)) as countOfType1, count(if(type=2,2,null)) as countOfType2, count(if(type=3,3,null)) as countOfType3 from counttest;
+--------------+--------------+--------------+
| countOfType1 | countOfType2 | countOfType3 |
+--------------+--------------+--------------+
|            2 |            5 |            1 |
+--------------+--------------+--------------+
1 row in set (0.00 sec)

Gruß Tom
 
Hi,

aber eine Frage hätte ich noch!

Wie kann ich das SQL-Query ausgeben? Am besten wäre in ein Array.

Ich habe es bis jetzt so:

PHP:
$query = "SELECT COUNT(status) AS anzahl, status FROM stunden WHERE userid='".$_SESSION['usersqlid']."' GROUP BY status DESC";
$result = mysql_query($query, $db) or die ($sqlerrortext1.mysql_error().$sqlerrortext2);
$stats = array();
while ($data = mysql_fetch_object($result)){
	array_push($stats, $data->anzahl);
}

Aber vielleicht ist das nicht die eleganteste Lösung.

Gruß
 
würd sagen, das passt eigentlich schon...

nur statt mysql_fetch_object würds wohl auch ein einfaches mysql_fetch_row tun; und je nachdem wie dus später weiterverwendest, könnt ich mir vorstellen dass es gut wäre den "status" auch mitzunehmen... z.b. so:
PHP:
$stats = array();
while ($data = mysql_fetch_row($result)){
	$stats[$data['status']] = $data['anzahl'];
}
 
Zurück