Anfängerfrage workflow

Anfängerfrage workflow

am 21.02.2007 15:29:16 von g.thaler

Mühsam nährt sich das Eichhorn. Ich habe meine ersten PHP-Skripte nun
fertig - ganz einfache Sachen: ein Skript gibt mir alle Datensätze der
Tabelle filme aus.

Auf meiner Hauptseite index.html bewirkt ein Klick auf "Filme anzeigen",
dass das Skript show1.php aufgerufern wird. Es bewirkt die Ausgabe aller
Filme, sortiert nach dem deutschen Titel, aufsteigend.


Jetzt will ich Sortiermöglichkeiten einbauen. Zunächst ganz einfach:

- alle Filme, sortiert nach dem deutschen Titel, absteigend
- alle Filme, aber sortiert nach dem Originaltitel, aufsteigend
- alle Filme, aber sortiert nach dem Originaltitel, absteigend

usw. -- sortiert nachverschiedenen Spalten.

Ein Klick auf "Alle Filme, sortiert nach dem deutschen Titel,
absteigend" (oder eine entsprechende Schaltfläche) ruft nun show2.php
auf. Dieses Skript ist gleich wie show1.php, nur dass der SQL-Anweisung
eben ein "order by spalte6 desc" angefügt ist.

Jede Sortierung ruft also ein eigenes Skript auf, und jedes Skript
öffnet eine DB-Verbindung, macht einen Select, gibt die Daten aus und
schließt die DB-Verbindung wieder.

Ist das üblich, dass man das so kompliziert macht oder macht man das anders?

lg Günter

Re: Anfängerfrage workflow

am 21.02.2007 15:37:38 von Olaf Schinkel

Hallo!

"Günter Thaler" schrieb im Newsbeitrag
news:45dc573c$0$6396$9b4e6d93@newsspool2.arcor-online.net...
> Mühsam nährt sich das Eichhorn. Ich habe meine ersten PHP-Skripte nun
> fertig - ganz einfache Sachen: ein Skript gibt mir alle Datensätze der
> Tabelle filme aus.
>
> Auf meiner Hauptseite index.html bewirkt ein Klick auf "Filme anzeigen",
> dass das Skript show1.php aufgerufern wird. Es bewirkt die Ausgabe aller
> Filme, sortiert nach dem deutschen Titel, aufsteigend.
>
>
> Jetzt will ich Sortiermöglichkeiten einbauen. Zunächst ganz einfach:
>
> - alle Filme, sortiert nach dem deutschen Titel, absteigend
> - alle Filme, aber sortiert nach dem Originaltitel, aufsteigend
> - alle Filme, aber sortiert nach dem Originaltitel, absteigend
>
> usw. -- sortiert nachverschiedenen Spalten.
>
> Ein Klick auf "Alle Filme, sortiert nach dem deutschen Titel, absteigend"
> (oder eine entsprechende Schaltfläche) ruft nun show2.php auf. Dieses
> Skript ist gleich wie show1.php, nur dass der SQL-Anweisung eben ein
> "order by spalte6 desc" angefügt ist.
>
> Jede Sortierung ruft also ein eigenes Skript auf, und jedes Skript öffnet
> eine DB-Verbindung, macht einen Select, gibt die Daten aus und schließt
> die DB-Verbindung wieder.
>
> Ist das üblich, dass man das so kompliziert macht oder macht man das
> anders?
Kann man so machen. Wäre mir aber zu kompliziert.
Nur mal so ansatzweise:
a) Immer das gleiche Script.
b) Übergabe an die Seite per POST, oder direkt..egal.
z.B. www.deineseite.de?sort=blablabla

c) dann:
$query = "select * from tabelle";
switch ($sort)
{
case 'irgendwas': $query += " where bedingung":
break;
default: Break;
}

Olaf

Re: Anfängerfrage workflow

am 21.02.2007 15:50:05 von g.thaler

> Kann man so machen. Wäre mir aber zu kompliziert.
> Nur mal so ansatzweise:
> a) Immer das gleiche Script.
> b) Übergabe an die Seite per POST, oder direkt..egal.
> z.B. www.deineseite.de?sort=blablabla
>
> c) dann:
> $query = "select * from tabelle";
> switch ($sort)
> {
> case 'irgendwas': $query += " where bedingung":
> break;
> default: Break;


Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mit
einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten
einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
wieder connect herstellen, reinholen und connect wieder beenden muss.

lg Günter

Re: Anfängerfrage workflow

am 21.02.2007 16:01:55 von Olaf Schinkel

Hallo!

"Günter Thaler" schrieb im Newsbeitrag
news:45dc5c1d$0$15942$9b4e6d93@newsspool4.arcor-online.net.. .
>
>> Kann man so machen. Wäre mir aber zu kompliziert.
>> Nur mal so ansatzweise:
>> a) Immer das gleiche Script.
>> b) Übergabe an die Seite per POST, oder direkt..egal.
>> z.B. www.deineseite.de?sort=blablabla
>>
>> c) dann:
>> $query = "select * from tabelle";
>> switch ($sort)
>> {
>> case 'irgendwas': $query += " where bedingung":
>> break;
>> default: Break;
>
>
> Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mit
> einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten
> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
> wieder connect herstellen, reinholen und connect wieder beenden muss.
Du hast mich nicht verstanden.
Es gibt nur EINE Webseite und EINE Datenbankabfrage.
Du solltest dich mal mit MySQL auseiandersetzen. Und hier mit dem Magischen
Wort "SORT".
Du kannst natürlich auch wild in Arrays rumsortieren, aber wenn MySQL das eh
schon für dich macht.....


Olaf

Re: Anfängerfrage workflow

am 21.02.2007 16:52:06 von Claus Reibenstein

Günter Thaler schrieb:

> Jede Sortierung ruft also ein eigenes Skript auf, und jedes Skript
> öffnet eine DB-Verbindung, macht einen Select, gibt die Daten aus und
> schließt die DB-Verbindung wieder.
>
> Ist das üblich, dass man das so kompliziert macht oder macht man das anders?

Dass jede Sortierung ein eigenes Script aufruft, obwohl sie eigentlich
alle dasselbe machen (Datenbankabfrage, Ergebnis ausgeben), ist
unsinnig. Sobald sich irgend etwas an Deiner Datenbank ändert, müsstest
Du jedes Script einzeln anpacken.

Besser ist es, diese zu einem einzigen Script zusammenzufassen und
dieses beim Aufruf mit entsprechenden Argumenten zu versorgen, etwa so:



Im Script kannst Du dann die Argumente mit $_GET['spalte'] und
$_GET['richtung'] auswerten und Dein SQL-Statement entsprechend
zusammenbauen.

Dass jedesmal ein neuer connect gemacht wird, ist hingegen vollkommen
normal. Grundsätzlich sollte man alles, was die Datenbank erledigen
kann, auch von ihr erledigen lassen. Dazu gehört z.B. auch die
Sortierung der Daten. Dies alles zwischenzuspeichern, falls die gleiche
Abfrage nochmal kommt, ist ebenfalls überflüssig. Auch das macht die
Datenbank schon.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Anfängerfrage workflow

am 21.02.2007 16:52:54 von Niels Braczek

Günter Thaler schrieb:

> Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mi=
t=20
> einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten =

> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht=
=20
> wieder connect herstellen, reinholen und connect wieder beenden muss.

Die einzige Alternative dazu, die Daten bei jedem Request neu zu laden,
ist die Speicherung in einer Session. Einen spürbaren Performanz-Gewinn=

bringt das aber nicht, weil die Daten einer Session idR ebenfalls im
Dateisystem gespeichert werden. Neu lesen ist also ok.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Anfängerfrage workflow

am 21.02.2007 19:54:36 von do.not.REMOVETHAT

Günter Thaler schrieb:

> ich dachte nur, dass man die Daten
> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
> wieder connect herstellen, reinholen und connect wieder beenden muss.

Du kannst mittels Javascript eine Tabelle umsortieren, aber...

1. geht das dann nicht bei deaktiviertem JS und

2. hat das nix mit PHP zu tun

Grüße, Matthias


--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: Anfängerfrage workflow

am 21.02.2007 20:06:17 von Niels Braczek

Matthias P. Wuerfl schrieb:
> Günter Thaler schrieb:
>=20
>> ich dachte nur, dass man die Daten=20
>> einmal von der DB abholt und dann intern irgendwie umsortiert und nich=
t=20
>> wieder connect herstellen, reinholen und connect wieder beenden muss.
>=20
> Du kannst mittels Javascript eine Tabelle umsortieren, aber...
>=20
> 1. geht das dann nicht bei deaktiviertem JS und
>=20
> 2. hat das nix mit PHP zu tun

Hier fehlt ein 'dann'. Das Originalposting is hier völlig OnT.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Anfängerfrage workflow

am 22.02.2007 09:37:37 von g.thaler

Olaf Schinkel schrieb:

>> Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mit
>> einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten
>> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
>> wieder connect herstellen, reinholen und connect wieder beenden muss.

> Du hast mich nicht verstanden.
> Es gibt nur EINE Webseite und EINE Datenbankabfrage.
> Du solltest dich mal mit MySQL auseiandersetzen. Und hier mit dem Magischen
> Wort "SORT".

Zu "SORT" habe ich nichts Rechtes gefunden im Referenzhandbuch - oder
meinst du ORDER BY?

> Du kannst natürlich auch wild in Arrays rumsortieren, aber wenn MySQL das eh
> schon für dich macht.....

Ich hoffe, ich sitze nicht *zu* fett auf meiner Leitung; meintest du mit
SORT die PHP-Funktion sort()?
[http://at.php.net/manual/de/function.sort.php] -- Dann habe ich dich
nun verstanden.

Gruß Günter

Re: Anfängerfrage workflow

am 22.02.2007 09:38:50 von g.thaler

Claus Reibenstein schrieb:

> Dass jedesmal ein neuer connect gemacht wird, ist hingegen vollkommen
> normal.

Danke, jetzt ists klar.

lg Günter

Re: Anfängerfrage workflow

am 22.02.2007 14:50:43 von Olaf Schinkel

Hallo!

"Günter Thaler" schrieb im Newsbeitrag
news:45dd5652$0$23145$9b4e6d93@newsspool1.arcor-online.net.. .
> Olaf Schinkel schrieb:
>
>>> Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mit
>>> einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten
>>> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
>>> wieder connect herstellen, reinholen und connect wieder beenden muss.
>
>> Du hast mich nicht verstanden.
>> Es gibt nur EINE Webseite und EINE Datenbankabfrage.
>> Du solltest dich mal mit MySQL auseiandersetzen. Und hier mit dem
>> Magischen Wort "SORT".
>
> Zu "SORT" habe ich nichts Rechtes gefunden im Referenzhandbuch - oder
> meinst du ORDER BY?
Klar. Sorry. Macht wohl das Fieber, daß ich seid ein paar Tagen habe.


>> Du kannst natürlich auch wild in Arrays rumsortieren, aber wenn MySQL das
>> eh schon für dich macht.....
>
> Ich hoffe, ich sitze nicht *zu* fett auf meiner Leitung; meintest du mit
> SORT die PHP-Funktion sort()?
> [http://at.php.net/manual/de/function.sort.php] -- Dann habe ich dich nun
> verstanden.

Ja, du kannst es MySQL sortieren lassen oder das array mit PHP sortieren.
Wie es dir besser gefällt.

Olaf

Re: Anfängerfrage workflow

am 26.02.2007 12:58:38 von Johannes Vogel

Hi Niels, Günter

Niels Braczek wrote:
> Günter Thaler schrieb:
>> Danke für die rasche Antwort. Aber das meinte ich nicht. Werde ich mit
>> einer switch-Anweisung auch machen. ich dachte nur, dass man die Daten
>> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
>> wieder connect herstellen, reinholen und connect wieder beenden muss.
> Die einzige Alternative dazu, die Daten bei jedem Request neu zu laden,
> ist die Speicherung in einer Session. Einen spürbaren Performanz-Gewinn
> bringt das aber nicht, weil die Daten einer Session idR ebenfalls im
> Dateisystem gespeichert werden. Neu lesen ist also ok.

Kommt der nicht voraussehbare enorme Speicherplatz dazu, der für die
möglicherweise vielen Sessions benötigt würde.

Nochmals als Zusammenfassung: Du würdest im ersten Aufruf das gesamte
Ergebnis in die Sessiondatei werfen und dann jeweils über die
Applikation sortieren.

1. Das DBMS macht die Sortierung meist schneller und eleganter.

2. Jede Session würde die gesamten Daten speichern. Bei 10 Usern ist das
vielleicht noch möglich - ab einer gewissen Anzahl Usern wird dir die HD
gefüllt sein.

3. Sessions werden nicht sofort wieder gelöscht. Erst nach einer in der
php.ini gespeicherten Zeit nach dem letzten Zugriff werden die Daten
gelöscht. Das verstärkt den Effekt von 2.

4. Wenn während der offenen Session die DB mutiert wird, wirst du das
während der offenen Session nicht erkennen.

5. Ein Tablescan ist meist nicht so wahnsinnig aufwändig. Achte darauf,
dass du die Spalten, über welche du sortierst, im DBMS indizierst.

Sorry, eigentlich wollte ich nur den vermehrten Speicherplatz
ansprechen. Dann folgte das eine dem anderen... Die Antwort ist wohl
nicht mehr auf Niels' Posting gemeint - und doch von seinem Posting
ausgelöst. :-)

HTH, Johannes

Re: Anfängerfrage workflow

am 26.02.2007 17:10:50 von Niels Braczek

Johannes Vogel schrieb:
> Niels Braczek wrote:

>> Die einzige Alternative dazu, die Daten bei jedem Request neu zu laden=
,
>> ist die Speicherung in einer Session. Einen spürbaren Performanz-Gew=
inn
>> bringt das aber nicht, weil die Daten einer Session idR ebenfalls im
>> Dateisystem gespeichert werden. Neu lesen ist also ok.
>=20
> Kommt der nicht voraussehbare enorme Speicherplatz dazu, der für die =

> möglicherweise vielen Sessions benötigt würde.

Ja.

> Nochmals als Zusammenfassung: Du würdest im ersten Aufruf das gesamte=
=20
> Ergebnis in die Sessiondatei werfen und dann jeweils über die=20
> Applikation sortieren.

Nein, ich würde das nicht machen. Ich würde die Daten bei jedem Reque=
st
neu laden, wie es üblich ist. Deshalb beendete ich den zitierten Absatz=

mit "Neu lesen ist also ok.".

> Sorry, eigentlich wollte ich nur den vermehrten Speicherplatz=20
> ansprechen. Dann folgte das eine dem anderen... Die Antwort ist wohl=20
> nicht mehr auf Niels' Posting gemeint - und doch von seinem Posting=20
> ausgelöst. :-)

Na, denn ist's ja gut ;-)

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Anfängerfrage workflow

am 27.02.2007 23:41:10 von extr

Günter Thaler schrieb:

> ich dachte nur, dass man die Daten
> einmal von der DB abholt und dann intern irgendwie umsortiert und nicht
> wieder connect herstellen, reinholen und connect wieder beenden muss.

Hallo Günter,
vielleicht liegt auch ein kleiner Verständnisfehler vor.

Wenn Dein Script von PHP abgearbeitet worden ist schliesst PHP
automatisch, im Normalfall, alle Verbindungen zu Dateien, anderen
Servern und auch der Datenbank wieder. Zudem gibt es den verbrauchten
Arbeitsspeicher frei, ergo die Daten sind futsch.

Stells Dir vor als wenn Du Dir daheim ne Pizza in den Ofen schiebst.
Nachdem Du den Ofen ausgemacht hast und Deine Pizza raus ist, weiß Dein
Ofen auch nicht mehr, das da mal ne Pizza drin war, die 20 Minuten bei
200°C gebacken wurde.

Wenn Dein Skript abgearbeitet ist, ist alles Weg was das Script zur
Laufzeit benötigte - ausser das, was in Datenbanken oder Dateien oder
sonst wo gespeichert wurde.

Mit besten Grüßen,
Tobias

Re: Anfängerfrage workflow

am 28.02.2007 07:47:59 von g.thaler

Besten Dank, ist mir jetzt klar. Ich bin fäklschlicherweise von einer
Analogie zur SAP/ABAP-Programmierung ausgegangen, dort funktioniert die
Sache anders.

lg Günter