Hagen: Array sortieren

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.

  1. Warum darf die Datenbank nicht sortieren?

    Gruß
    lena

    1. 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

      1. 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

        1. 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?

          1. 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.

            1. 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)

              1. 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

                1. 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

            2. 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 * FROM diana ORDER BY diana.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

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. 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 ;)

                1. 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 :-)

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
              2. 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...

                --
                "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                1. 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

                  1. 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

                    --
                    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes