variabel bereits IM MYSQL trennen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • variabel bereits IM MYSQL trennen

    hi

    weiss jemand, wie ich den befehl explode bereits im mysql query gebrauchen kann??

    also das ich einen string, der in einer tabellen spalte ist, und etwa so aussieht:


    2;6;0;0;20


    bereits im mysql query trennen kann, so das ich dann rechnen kann,

    where explode(';',files,2) > 3 AND date ....


    also irgendwie sollte der befehl oben (also ist nur ein von mir erfundener) den string 'files' bei den ';' trennen, und den zweiten ('6') teil ausgeben.


    aber leider finde ich im mysql hanbuch den befehl explode nicht, wenn er analog zu php wäre.


    kennt sich da jemand aus, und weiss, das es solch einen befehl gibt??


    kommt mir bitte nicht damit, ich soll es doch im PHP teil trennen.
    kann ich nicht gebrauchen.

    und das es solch einen befehl gibt, davon bin ich persönlich fest überzogen, da ich in letzter zeit erfahren musste, das SQL eben doch eine sehr komplexe sprache ist.

    und nicht nur einfach ein SELECT FROM




    PS:
    sorry wenn ich momenta nur gleich fragen stelle, und selber grad keine beantworte, aber da ihr hier absolute profis sind, bin ich immer am suchen, ob ich da bei einem vielleicht doch noch was antworten könnte, was ihr noch nicht geschrieben haben.

  • #2
    nicht das ich wüsste

    warum kannst du das exploden in php nich brauchen?

    warum stehen die werte so in der db und nicht alle in einzelnen datensätzen?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      where explode(';',files,2) > 3 AND date ....
      ich denke er möchte das nur datensätze mit bestimmten werten zw. ";" auswählen. wenn er es mit php macht, muss er ja alle datensätze auslesen, vergleichen... und ist sehr rechnenaufwendig...

      anderer möglicher lösungsansatz:
      ..WHERE zeileXY like '%;%;%;2;%;%'

      es gibt sicher auch eine interne methode von mysql, weiß aber auch nicht welche...

      gruß
      dominik
      Zuletzt geändert von domink_!!!; 05.11.2003, 21:00.

      singles

      Kommentar


      • #4
        ich denke, mit könntest SUBSTRING_INDEX du erfolg haben.

        SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)
        Gibt die Teilzeichenfolge von Zeichenkette zeichenkette vor zaehler Vorkommen des Begrenzers begrenzer zurück. Wenn zaehler positiv ist, wird alle links vom letzten Begrenzer zurückgegeben (von links gezählt). Wenn zaehler negativ ist, wird alles rechts vom letzten Begrenzer (von rechts gezählt) zurückgegeben

        http://www.mysql.de/doc/de/String_functions.html

        damit sollte sich doch was machen lassen ...
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          das geht, problematisch is der vergleich auf > oder <
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            meinst du das?:

            Stimmt mit den Zeichenfolgen de oder abc überein.
            mysql> select "pi" REGEXP "pi|apa"; -> 1
            mysql> select "axe" REGEXP "pi|apa"; -> 0
            mysql> select "apa" REGEXP "pi|apa"; -> 1
            mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1
            mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1
            mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0

            http://www.mysql.de/doc/de/Regexp.html

            php-Entwicklung | ebiz-consult.de
            PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
            die PHP Marktplatz-Software | ebiz-trader.de

            Kommentar


            • #7
              warum kannst du das exploden in php nich brauchen
              nun, ich brauch das im mysql bereits, weil er, erstens mal eine die seitenanzahl ausgeben soll.
              und noch ein paar andere gründe, die ich aus zeitgründen nicht nenne.
              ist auch nicht wichtig.


              warum stehen die werte so in der db und nicht alle in einzelnen datensätzen
              weil es in dieser art und weise bis zu 23 (momentan vorgesehen) zahlen sind, die mit ; unterteil werden.

              und da jeden einzel in eine spalte zu speichern brauch zu viel platz, und zu viel performence, da das script schnell mal ein paar tausend DS durchsuchen muss (mom. 1253)




              also ich hab da mal etwas weiter gedacht, und zwar mache ich die variabel nun etwa so:
              jpg16;mpg3;mov0;wmv0;asf0;html10;gif4;swf1;


              also nun mit dem substiring index gespielt, sollte doch so was gehen:

              Code:
              substring_index(substring_index(dateitypen,"mpg",1),";",-1)
              und nun sollte ich doch theoretisch, den wert "3" haben, oder??

              ich kann es momentan gerade nicht testen, da ich auf diesem computer grad kein apache installiert hab, und die origial datenbank für die das zu machen ist, wird erst geändert, wenn es auf dem localhost stimmt.
              also kann ich es bis morgen noch nicht testen, aber ich denke mal, es sollte schon gehen.

              müsst es nicht testen, ist zu viel aufwand für euch.

              Kommentar


              • #8
                Installier morgen bei dir Apache+MySQL+PHP - das dauert nicht lang und du kannst anschließend selber rumprobieren.

                Dein Versuch sieht schon fast gut aus - liefert den Text links vom ersten mpg (in deinem Beispiel also 'jpg16;')
                und davon alles hinter dem letzten Semikolon - also gar nichts.

                substring_index(substring_index(dateitypen,';',2),';',-1)
                liefert 'mpg3'; die 3 alleine bekommst du mit
                substring_index(substring_index(dateitypen,';',2),'mpg',-1)
                aber nur, wenn der zweite Wert tatsächlich mit mpg beginnt.

                Ansonsten hilft dir nur PHP weiter (substr in Verbindung mit strspn/strcspn) - oder ein sehr umfangreicher SQL-Ausdruck, der aber nicht unbedingt Zeit spart.

                edit: Wo kamen nur die Gänsefüße her? hab sie durch single quotes ersetzt.
                Zuletzt geändert von Titus; 07.11.2003, 10:55.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  jaja, mysql und apache hab ich schon auf meinem PC.
                  schon lange.
                  und normalerweise entwickle ich auch alles direkt auf diesem PC.
                  da es sich hierbei aber um ein projekt handelt, welches wir in der schule bearbeiten, und ich die daten nicht habe, muss ich warten, bis ich wieder informatik habe.


                  aber danke für die korrektur

                  Kommentar


                  • #10
                    faule Ausrede

                    Schau dir mal die Beispiele im MySQL-Handbuch an - da wird auch selten mal eine Tabelle erwähnt.
                    Da Du weißt, wie die Daten ungefähr aussehen, kannst du auch schon mal Teilqueries entwickeln - probier die hier mal aus:
                    select substring_index(substring_index('2;6;0;0;20',';',2),';',-1)
                    oder
                    select substring_index(substring_index('jpg16;mpg3;mov0;wmv0;asf0;html10;gif4;swf1;',';',2),';',-1)
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar

                    Lädt...
                    X