phpbar.de logo

Mailinglisten-Archive

[php] mysql - Sortieren wenn order schon benutzt wurde(+ viele =?iso-8859-1?Q?Datens=E4tze)?=

[php] mysql - Sortieren wenn order schon benutzt wurde(+ viele =?iso-8859-1?Q?Datens=E4tze)?=

Thomas Feyrer Dante_(at)_altmuehlnet.de
Sat, 30 Sep 2000 20:45:45 +0200


At 13:50 30.09.2000 +0200, Ithamar Garbe wrote:
>Was mich interessieren würde, ist, ob bei grösseren Datenmengen
>der Server nicht ziemlich ausgelastet wird, weil das Array ja
>in den Speicher kommt. Bei 5 PLZ's sollte das kein Thema sein,
>aber was ist bei mehreren 100 Datensätzen?

Also ich handle mit PHP Arrays von bis zu 3 MB, das kam daher,
das ich mit per Perl-Script ein DBF parsen lasse (geht nicht per
PHP, da ich auch die Memo-Felder brauch) und das Perl-Script
eine .inc erstellt, die die Form:
$a = array(
    array(
	'foo' => 'bar',
       'bar' => 'foo'
    ),
    ...
);
hat. Das include ich mit PHP und schreib alles in ne MySQL
DB. Auf einem P200 dauerte das ca. 20 Min. Das DBF hatte
ca. 4000 Datensätze. Der Speicherverbrauch ging dabei nicht
allzu sehr in die Höhe, eher die Prozessorauslastung  auf
100% ;)

>Beispiel:
>Ich habe eine Tabelle für eine Online-Anmeldung für eine
>(Netzwerk-)Party. >Ich habe ein Feld, ob ein Benutzer schon
>bezahlt hat (entweder 0 oder 1), ob er sich für Turniere
>angemeldet hat (0 oder 1), ob er schon einen Platz gewählt hat
>(0 oder 1) ...
>
>Jetzt möchte ich auf der Teilnehmerliste das ganze wie folgt
>sortieren:
>Zuerst kommen alle Teilnehmer, die schon bezahlt haben (ist am
>wichtigsten), danach, alle, die bezahlt und/oder einen Platz
>reserviert haben (das zweitwichtigste), und danach kommen alle
>User, die die Turniere gewählt haben, und schliesslich alle
>User, die noch keines der 3 Dinge getan haben.
>"order by" kommt nicht in frage, das hab ich schon probiert.

Wiso kommt das nicht in Frage, klappt doch wunderbar:

CREATE TABLE online (
  id int(11) DEFAULT '0' NOT NULL auto_increment,
  has_paid int(11) DEFAULT '0' NOT NULL,
  has_registerd int(11) DEFAULT '0' NOT NULL,
  has_place int(11) DEFAULT '0' NOT NULL,
  PRIMARY KEY (id)
);

mysql> SELECT * FROM online ORDER BY has_paid DESC, has_registerd DESC,
       has_place DESC;
+----+----------+---------------+-----------+
| id | has_paid | has_registerd | has_place |
+----+----------+---------------+-----------+
|  2 |        1 |             1 |         1 |
|  7 |        1 |             1 |         1 |
| 12 |        1 |             1 |         1 |
| 17 |        1 |             1 |         1 |
| 22 |        1 |             1 |         1 |
| 27 |        1 |             1 |         1 |
|  6 |        1 |             1 |         0 |
| 16 |        1 |             1 |         0 |
| 26 |        1 |             1 |         0 |
|  5 |        1 |             0 |         1 |
| 15 |        1 |             0 |         1 |
| 25 |        1 |             0 |         1 |
|  1 |        1 |             0 |         0 |
|  8 |        1 |             0 |         0 |
|  9 |        1 |             0 |         0 |
| 18 |        1 |             0 |         0 |
| 19 |        1 |             0 |         0 |
| 28 |        1 |             0 |         0 |
| 29 |        1 |             0 |         0 |
|  3 |        0 |             1 |         1 |
| 13 |        0 |             1 |         1 |
| 23 |        0 |             1 |         1 |
| 10 |        0 |             1 |         0 |
| 20 |        0 |             1 |         0 |
| 30 |        0 |             1 |         0 |
|  4 |        0 |             0 |         1 |
| 14 |        0 |             0 |         1 |
| 24 |        0 |             0 |         1 |
| 11 |        0 |             0 |         0 |
| 21 |        0 |             0 |         0 |
| 31 |        0 |             0 |         0 |
+----+----------+---------------+-----------+
31 rows in set (0.06 sec)

Ist doch genau so wie du es wolltest, oder?

Bye
 Dante



php::bar PHP Wiki   -   Listenarchive