Array sortieren
Hagen
- php
Hallo!
Ich muss für ein größeres Projekt Namen aus einer Datenbank
lesen und sie dann alphabetisch sortieren. Das mache ich
indem ich jeden Namen mit array_push dann sortiere ich das
Array mit natsort. Es läuft eigentlich super, aber als ich
meinen Auftraggebern das Projekt vorgestellt und demonstriert
habe fügte ich einige Namen hinzu. Dann sah ich auf der Seite
auf der diese Sortiert angezeigt wurden, dass erst alle groß
geschriebenen Namen kamen und dann alle klein geschriebenen.
Das war mir äußerst peinlich. =)
Ich habe schon ca. eine Stunde im Internet nach einer Lösung
des Problems gesucht, aber ich habe nichts gefunden. Ich hoffe
jemand kann mir helfen.
Warum darf die Datenbank nicht sortieren?
Gruß
lena
Hallo!
Warum darf die Datenbank nicht sortieren?
Ich habe noch nicht so viel Ahnung von Mysql Datenbanken,
da ich diese normalerweise nicht häufig benutze. Ich hoffe
es macht euch nichts aus mir zu erklären wie ich das machen
kann.
Gruß Hagen
Ich habe noch nicht so viel Ahnung von Mysql Datenbanken,
da ich diese normalerweise nicht häufig benutze. Ich hoffe
es macht euch nichts aus mir zu erklären wie ich das machen
kann.
wenn etwas die datenbank machen kann (sortieren, suchen/ersetzen, kürzen, rechnen usw) dann lass es die datenbank tun - die einzige schichte bei denen ich, obwohl es nicht gerne gesehen wird, php der datenbank vorziehe ist die behandlung von timestamps (das sehen übrigens auch andere entwickler (zumindest momentan) auch so - zb die mediawiki-entwickler oder die typo3-entwickler)
aber grundlegend: wenns irgendwie geht, lass es die datenbank machen - sql-datenbanken können verdammt viel, sie beherrschen sogar grundrechnungsarten oder auch komplexe mathematische operationen (und das sogar verdammt schnell)
ORDER BY ist in deinem fall das gesuchte
Hallo
Danke für die schnelle Hilfe, aber wie kann ich nun meine
Tabelle Alphabetisch ordnen. Ich habe es nun so versucht:
SELECT name FROM diana ORDER BY ASC
Es klappt allerdings nicht. Was fehlt oder was mache ich
falsch?
Hi!
Ich habe die lösung gefunden.
SELECT * FROM diana
ORDER BY diana
.name
ASC
Ich glaube ich muss mir nochmal ein tutorial über sql
durchlesen. Ich habe gerade bemerkt, dass ich in keiner
Form verstehe, was ich dort überhaupt mache.
Ich glaube ich muss mir nochmal ein tutorial über sql
durchlesen. Ich habe gerade bemerkt, dass ich in keiner
Form verstehe, was ich dort überhaupt mache.
nimm das hier, allerdings ist das ganze nicht mysql-spezifisch, ist aber verständich geschrieben und die meisten abfragen funktionieren auch mit mysql
zwischen den populäreren datenbanksystemen gibts leider in der syntax manchmal kleine unterschiede zb gibt es in älteren versionen von MSSQL kein LIMIT (wie zb in MySQL)
Hi!
Also das ist ja mehr Hilfe als ich erwartet hätte. Ich habe das ganze
am anfang auch mit XML gemacht, allerdings würden es >1000 Dateien,
die ungefähr 10 000 - 20 000 Zeichen enthalten, werden. (Es ist ein Verzeichnis für Gefahrstoffe, von denen es weit mehr als 1000 gibt)
Man müsste also erst das Verzeichnis nach Dateien auslesen und dann
aus allen Dateien die ersten 200 Zeichen einlesen um den Namen
herauszufinden. Ich denke, dass man das mit Mysql viel besser und
schneller lösen kann. Also stimme ich, obwohl ich nicht so viel
Ahnung vom Thema habe, Peter Pan und Suit zu.
Im übrigen ist es sehr schön, dass Suit mir gleich ein Tutorial
empfiehlt. Danke!
Gruß Hagen
Ich denke, dass man das mit Mysql viel besser und schneller lösen kann. Also stimme ich, obwohl ich nicht so viel Ahnung vom Thema habe, Peter Pan und Suit zu.
Im übrigen ist es sehr schön, dass Suit mir gleich ein Tutorial empfiehlt. Danke!
in deinem fall sowieso - das von cheatah "teuere" verbinden zu einer datebank bezieht sich vor allem darauf, dass man nicht unötigerweise etwas von einer datenbank machen lassen soll, weils die auch kann obowhl man grade keine verbindung offen hat
$foo = 1;
$bar = 2;
echo ($foo + $bar);
das lässt sich auch mit php wunderbar an mysql übergeben und erledigen:
$query = "SELECT " . $foo . "+" . $bar;
[...]
in solchen fällen ist es absolut irre eine datenbank zu verwenden
auch für konfigurationsdaten, die man permanent braucht:
beispiel ein suffix für das <title />-element eines html-dokuments, da ist es wahrscheinlich wesentlich schlauer define('PAGETITLE', 'Meine tolle Seite'); zu verwenden um eine konstante zu setzen, als dafür eine konfigurationstabelle anzulegen die man bei jedem seitenaufruf abfrägt - bei einer ordentliche template-engine, die seiten zusammenbaut und den gerenderten quelltext cached ist die datenbankvariante wahrscheinlich wieder einfacher
da muss man halt immer abwägen - aber wenn du wie in deinem fall daten aus einer datenbank holst, kannst du das in einem zug eben auch sortieren
Hi,
kurz noch eine Anmerkung zu einer Aussage von suit:
wenn etwas die datenbank machen kann [...] dann lass es die datenbank tun [...]
Dies gilt nur, wenn Du eh gerade die Datenbank etwas tun lässt. Ansonsten ist es sehr, sehr teuer, die Datenbank etwas tun zu lassen, was man in dem Moment auch komplett ohne sie tun könnte.
Ich habe die lösung gefunden.
SELECT * FROMdiana
ORDER BYdiana
.name
ASC
Gewöhne Dir bitte gleich zu Anfang *unbedingt* ab:
1.) "*" zu selektieren. Das mag zu Testzwecken "mal eben schnell hingeschrieben" ganz okay sein, aber im Live-Betrieb ist das eines der klassichen "Don't"s.
2.) Backtickeritis. Siehe hierzu den Thread MySQL: Striche
notwendig?.
Ich glaube ich muss mir nochmal ein tutorial über sql
durchlesen. Ich habe gerade bemerkt, dass ich in keiner
Form verstehe, was ich dort überhaupt mache.
Beides - sowohl das Vorhaben, Dich mit SQL zu beschäftigen, als auch die Schlussfolgerung "verstehe ich nicht, will ich aber anwenden => muss ich mich mit beschäftigen" - ist sehr lobenswert.
Cheatah
Dies gilt nur, wenn Du eh gerade die Datenbank etwas tun lässt. Ansonsten ist es sehr, sehr teuer, die Datenbank etwas tun zu lassen, was man in dem Moment auch komplett ohne sie tun könnte.
im php/mysql-kontext mag das sicher zutreffen, aber hast du schon mal mit asp/vb-script und arrays "gearbeitet"?
es ist teilweise wesentlich performanter, dafür eine datenbank (auch wenns nur eine simple access-datenbank mit einer tabelle ist) zu missbrauchen als tatsächlich mit arrays zu arbeiten
mal schnell 500 einträge aus einer textdatei in ein array lesen, sortieren zählen und zb als gewichtete liste ausgeben ist in php mit ein paar zeilen erledigt, in asp/vb könnte man das als tagesmarsch bezeichnen ;)
Hi,
Dies gilt nur, wenn Du eh gerade die Datenbank etwas tun lässt. Ansonsten ist es sehr, sehr teuer, die Datenbank etwas tun zu lassen, was man in dem Moment auch komplett ohne sie tun könnte.
im php/mysql-kontext mag das sicher zutreffen, aber hast du schon mal mit asp/vb-script und arrays "gearbeitet"?
nicht wirklich, aber was Du sagst klingt sehr haarsträubend. Von daher bin ich froh, nichts darüber zu wissen und ignoriere somit Deine Ausführungen gepflegt ;-)
Chea "<finger steck-in='Ohr'>LALALALA!</finger>" tah :-)
Hi Cheatah!
kurz noch eine Anmerkung zu einer Aussage von suit:
wenn etwas die datenbank machen kann [...] dann lass es die datenbank tun [...]
Dies gilt nur, wenn Du eh gerade die Datenbank etwas tun lässt. Ansonsten ist es sehr, sehr teuer, die Datenbank etwas tun zu lassen, was man in dem Moment auch komplett ohne sie tun könnte.
Sorry, aber: diese Aussage "Das teuerste ist die Abfrage der Datenbank - die ist möglichst immer zu vermeiden!" habe ich mittlerweile so was von satt.
Du deutest ja im ersten Teil oben an, dass ein (neuer) Connect zum DB-Server teuer ist - bzw. sein kann.
Ich habe das in Projekten immer wieder erlebt, dass unnötigerweise 'herum gefummelt' wurde, um einen DB-Connect und das Absetzen von Queries zu vermeiden.
Ein Beispiel: Hunderttausende (kein Typo!) von Datensätzen wurden als XML im Filesystem gespeichert und bei Bedarf wurde per Java dieses XML-Geraffel geparst, um z.B: Daten nach der PLZ zu sortieren.
Nein, dies war bei keiner Mc*-Consulting-Bude, es war auch keine Ich-AG, sowas mußte ich mir von einer Gruppe Informatikern eines nicht ganz unbedeutenden deutschen Forschungsinstitutes anhören.
Du hast das wahrscheinlich nicht so gemeint, aber diese Dogma "DB = teuer"
teile ich nicht in 100% aller Fälle
Von daher bin ich _diesem Kontext hier_ auf der Seite von suit, was seine Aussage anbelangt ;)
Beides - sowohl das Vorhaben, Dich mit SQL zu beschäftigen, als auch die Schlussfolgerung "verstehe ich nicht, will ich aber anwenden => muss ich mich mit beschäftigen" - ist sehr lobenswert.
Ja! Das finde ich auch,
off:P'FACK vermeiden wollend'P
P.S: Cheatah? Ist es eigentlich ok hier von 'teuer' zu sprechen, ohne das zu erklären? Ich bin nicht so oft hier wie Du, deshalb frage ich mal...
P.S: Cheatah? Ist es eigentlich ok hier von 'teuer' zu sprechen, ohne das zu erklären? Ich bin nicht so oft hier wie Du, deshalb frage ich mal...
er meint damit eher, die datenbank zu belasten, wenn es nicht notwendig ist
in dem von dir beschriebenen beispiel ist eine datenbank nicht zu teuer - nur wenns zum um eine lock-variable für ein script geht, ist es billiger ein lock-file im dateisystem anzulegen als dafür eine datenbank zu verwenden und eine variable zu setzen die bei jedem ausführen des scripts geprüft werden muss
Hi!
P.S: Cheatah? Ist es eigentlich ok hier von 'teuer' zu sprechen, ohne das zu erklären? Ich bin nicht so oft hier wie Du, deshalb frage ich mal...
er meint damit eher, die datenbank zu belasten, wenn es nicht notwendig ist
Zitierst Du jetzt komisch, oder beziehst Du Dich explizit auf mein P.S.?
Ich habe selbst das Wort 'teuer' i.S.v: kostet (Rechen|Rechner-) Zeit, Kapazität benutzt.
off:PP
Hi,
Ich muss für ein größeres Projekt Namen aus einer Datenbank
lesen und sie dann alphabetisch sortieren. Das mache ich
indem ich jeden Namen mit array_push dann sortiere
ähm, für sowas ist die Datenbank da.
Cheatah