Sortierung MySQL
am 28.09.2004 14:26:00 von Alexander Schulte
Ich versuche über einen Link Zeilen einer Tabelle entsprechend ihrer
Bezeichnung zu sortieren.
Beispiel:
Name <> Meier Müller
Vorname <> Hans Georg
Alter <> 34 45
D.h., der linke Pfeil soll die Liste aufsteigend, der rechte sie absteigend
sortieren, wobei die Sortierung zeilenweise jeweils nach Name, Vorname bzw.
Alter erfolgen soll.
Ich dachte, dass sollte sich relativ einfach über eine Variable in der Form
$result = @mysql_query("SELECT * FROM Adressen order by $sortBy");
realisieren lassen, wobei die erste Tabellenspalte auf diese Weise erzeugt
wird
$sortBy = "Name asc";
for ($i = 0; $i < mysql_num_fields($result); $i++){
echo "
\n";
echo "".mysql_field_name($result,$i)." | \n";
echo "
src=\"left.jpg\" | \n";
echo "
desc\"> | \n";
echo "
\n";
}
Das Problem ist, es passiert nichts. Bin für jeden Hinweis dankbar!
Alex
Re: Sortierung MySQL
am 28.09.2004 22:39:37 von Ralf Haas
> $sortBy = "Name asc";
>
> for ($i = 0; $i < mysql_num_fields($result); $i++){
> echo "
\n";
> echo "".mysql_field_name($result,$i)." | \n";
> echo "
> src=\"left.jpg\" | \n";
> echo "
> desc\"> | \n";
> echo "
\n";
> }
Egal was du als $sortBy über deine Links weitergibst, in der ersten
Zeile wird es immer wieder mit "Name asc" überschrieben.
Es müsste lauten:
if (!isset($sortBy))
{
$sortBy = "Name asc";
}
Ralf Haas
Re: Sortierung MySQL
am 29.09.2004 15:55:22 von Alexander Schulte
...danke hab ich gestern auch noch gemerkt! Die Sortierung funktioniert jetzt
auch, mit urlencode() selbst mit Umlauten.
asc>
Problem sind nur noch Feldnamen, die aus 2 Wörtern bestehen, z.B.
$sortBy = "letzte Adresse"
$result = @mysql_query("SELECT * FROM Namen order by $sortBy");
Wie kann man sowas realisieren und kann man Felder vom Typ varchar
nummerisch sortieren?
Alex
Re: Sortierung MySQL
am 29.09.2004 18:37:29 von Uli Honal
Ralf Haas wrote:
>=20
>> $sortBy =3D "Name asc";
>>
>> for ($i =3D 0; $i < mysql_num_fields($result); $i++){
>> echo "
\n"; echo "".mysql_field_name($result,$i)." | \n";
>> echo "
>> asc\">
>> src=3D\"left.jpg\" | \n";
>> echo "
>> desc\"> | \n";
>> echo "
\n";
>> }
>=20
>=20
> Egal was du als $sortBy über deine Links weitergibst, in der erste=
n=20
> Zeile wird es immer wieder mit "Name asc" überschrieben.
>=20
> Es müsste lauten:
>=20
> if (!isset($sortBy))
> {
> $sortBy =3D "Name asc";
> }
Mal ein paar Tips frei heraus:
1.) auf GET-Parameter nur mit $_GET[] zugereifen.
2.) register_globals ausschalten
http://de3.php.net/manual/en/security.registerglobals.php
3.) Funktion "Quelltext anzeigen" im Browser benutzen, ich fürchte d=
a=20
steht sowas drin wie:
..
href=3D"http://example.com/script.php?sortBy=3Dmysql_field_n ame(Resource,=
0)">...
4.) Ãbersichtlichere Schreibweise für die Ausgabe von HTML mit =
PHP-Variablen darin ausprobieren:
for (..) {
$sortBy =3D urlencode(mysql_field_name(...));=09
?>
...
?sortBy=3D $sortBy ?>"=
>
...
|
}
?>
Ein Editor mit Color-Coding ist auch sehr praktisch.
HTH,
-Uli
Re: Sortierung MySQL
am 29.09.2004 18:44:55 von Uli Honal
Alexander Schulte wrote:
> $result =3D @mysql_query("SELECT * FROM Adressen order by $sortBy");
16.18. Wie kann ich bösartigen Code in SQL-Abfragen unterbinden?
http://www.php-faq.de/q/q-sql-injection.html
16.14. Warum soll ich nicht SELECT * schreiben?
http://www.php-faq.de/q/q-sql-select.html
Im übrigen sollte Dein Lösungsansatz schon zum Ziel führen=
-Uli.
Re: Sortierung MySQL
am 29.09.2004 23:45:37 von Niels Braczek
Alexander Schulte schrieb:
> Problem sind nur noch Feldnamen, die aus 2 Wörtern bestehen, z.B.
>
> $sortBy = "letzte Adresse"
>
> $result = @mysql_query("SELECT * FROM Namen order by $sortBy");
>
> Wie kann man sowas realisieren und kann man Felder vom Typ varchar
> nummerisch sortieren?
Korrigiere die Feldnamen, so dass sie nur a-z und Unterstrich enthalten.
Falls das aus unerfindlichen Gründen nicht möglich sein sollte, kannst
du für MySQL den Feldnamen mit Backticks einschließen: `letzte Adresse`.
Zahlen werden numerisch sortiert, Texte alfabetisch. Wenn du Texte
numerisch sortieren willst, ist dein Design kaputt.
MfG
Niels
--
Eigendlich is n Standart in der Rechtschreibung föllig
egal. Hauptsache is, mann ferstet mich! Ich kapier nur
ned, wiso der PHP-Pharser immer mekert?
Re: Sortierung MySQL
am 03.10.2004 14:55:07 von Niklas Schumann
Alexander Schulte wrote:
> Problem sind nur noch Feldnamen, die aus 2 Wörtern bestehen, z.B.
Was? Feldnamen aus 2 Wörtern? Geht das überhaupt?
> Wie kann man sowas realisieren und kann man Felder vom Typ varchar
> nummerisch sortieren?
if(is_numeric($feld))
{
$feld = (integer)$feld;
}
Ist aber nicht sehr elegant, weil dann auch nur Feldnamen die nur aus
Zahlen bestehen als Integer genommen werden.
So habe ich dich verstanden?!
> Alex
Niklas
--
Fatal Error: Could not find "brain" in Line 2004
Re: Sortierung MySQL
am 03.10.2004 15:14:31 von Johannes Vogel
Hallo Niklas, hi Alexander
Niklas Schumann wrote:
> Alexander Schulte wrote:
>> Problem sind nur noch Feldnamen, die aus 2 Wörtern bestehen, z.B.
> Was? Feldnamen aus 2 Wörtern? Geht das überhaupt?
Klar: select `ein Feldname` from `eine Tabelle` where `zweiter FN` = 5;
>> Wie kann man sowas realisieren und kann man Felder vom Typ varchar
>> nummerisch sortieren?
> Ist aber nicht sehr elegant, weil dann auch nur Feldnamen die nur aus
> Zahlen bestehen als Integer genommen werden.
Du interessierst dich wohl für den nat. Sortieralgorithmus.
natsort()
http://www.php.net/manual/en/function.natsort.php
Obwohl du in einer PHP-NG fragst, interessierst du dich wohl eher für
die MySQL-Lösung dazu. Vielleicht interessierst du dich für die
CAST()-Funktion.
select col1, col2
from table
where col2 < 5
order by cast(col1, UNSIGNED);
Getestet hab ich das nicht. Schnell wirds sicher auch nicht sein. Aber
vielleicht bringt es dich weiter...
HTH, Johannes
Re: Sortierung MySQL
am 03.10.2004 17:49:19 von Niklas Schumann
Johannes Vogel wrote:
>> Was? Feldnamen aus 2 Wörtern? Geht das überhaupt?
>
> Klar: select `ein Feldname` from `eine Tabelle` where `zweiter FN` = 5;
>
Ist mir neu, danke für den Hinweis. Troztdem würde _ich_ es nicht
verwenden, weil ich nicht standardmäÃig '', ´´ verwende (Zumindest bei
Feldnamen nicht).
Danke, Niklas
--
Fatal Error: Could not find "brain" in Line 2004
Re: Sortierung MySQL
am 03.10.2004 19:17:47 von Niels Braczek
Niklas Schumann schrieb:
> Johannes Vogel wrote:
>>> Was? Feldnamen aus 2 Wörtern? Geht das überhaupt?
>>
>> Klar: select `ein Feldname` from `eine Tabelle` where `zweiter FN` =
>> 5;
>>
> Ist mir neu, danke für den Hinweis. Troztdem würde _ich_ es nicht
> verwenden, weil ich nicht standardmäßig '', ´´ verwende (Zumindest bei
> Feldnamen nicht).
Es wäre auch beides falsch. Das korrekte Zeichen ist `, der sog.
Backtick. Aber man will sowieso alle Fälle vermeiden, bei denen man
darauf zurückgreifen müsste.
MfG
Niels
--
Das Senden unbestellter Werbung an diese E-Mail-Adresse ist
gegen eine Aufwandsentschädigung von 250 Euro pro erhaltener
E-Mail gestattet. Rabatte auf Anfrage.
Die Beweislast der Bestellung liegt bei der Werbung versendenen Firma.
Re: Sortierung MySQL
am 03.10.2004 19:35:12 von Niklas Schumann
Niels Braczek wrote:
> Niklas Schumann schrieb:
>
>>Johannes Vogel wrote:
>>
>>>>Was? Feldnamen aus 2 Wörtern? Geht das überhaupt?
>>>
>>>Klar: select `ein Feldname` from `eine Tabelle` where `zweiter FN` =
>>>5;
>>>
>>
>>Ist mir neu, danke für den Hinweis. Troztdem würde _ich_ es nicht
>>verwenden, weil ich nicht standardmäßig '', ´´ verwende (Zumindest bei
>>Feldnamen nicht).
>
>
> Es wäre auch beides falsch. Das korrekte Zeichen ist `, der sog.
> Backtick. Aber man will sowieso alle Fälle vermeiden, bei denen man
> darauf zurückgreifen müsste.
>
> MfG
> Niels
>
Da siehst du's...
--
Fatal Error: Could not find "brain" in Line 2004