[MySQL 4.0] SELECT feld feld2, IF(feld2 REGEXP ...

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

  • [MySQL 4.0] SELECT feld feld2, IF(feld2 REGEXP ...

    hallo ihr,

    ich habe da ein kleines Problem ....

    Ich würde gerne folgendes per SQL verwirklichen ...

    Code:
    SELECT
    INSERT(pagename, 1, 35, '') pagename
    , IF(pagename = '', 1, ...
    Ist nur ein Bsp., aber soll so etwas darstellen wie: Selektiere pagename und verändere es gleichzeitig(z.b. mit INSERT), dann überprüfe ob das VERÄNDERTE Feld pagename leer ist etc.(WICHTIG ist hierbei, das dass veränderte Feld pagename genommen wird)

    Nur leider funktioniert das nicht so ... Wird das nicht unterstützt?

    PS: Bevor jetzt jemand sagt mache doch IF(INSERT(pagename ...
    ne dat geht net, dann das IFs Zeug ist sehr tief verschachtelt und ich denke mal, wenn man erst jedesmal INSERT machen müsste, wäre das zienlich lahm ...

    Danke dann
    Zuletzt geändert von CannabisCow; 29.06.2003, 01:45.

  • #2
    sowas merkwürdiges wird soweit ich weiß noch nichtmal von oracle oder ähnlichem unterstützt.
    da wirst du wohl erst den INSERT separat machen müssen.

    brauchst ja auch keine php-if geschichte, aber die beiden sql-stmts müssen auseinander.

    Kommentar


    • #3
      Ich meine nicht das INSERT in Form von INSERT INTO ... sondern dieses

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

      mysql> select INSERT('Heinzholger', 6, 4, 'DIET');

      Kommentar


      • #4
        dann solltest du aber sowas machen wie ....

        Code:
        SELECT IF ( INSERT(pagename, 1, 35, '') =='', 1, ... ) AS irgendwas, .....
        weil INSERT () liefert ein ergebnis, und dieses ergebnis soll in die if abfrage ... also gehört INSERT in das IF hinein
        Zuletzt geändert von graf; 29.06.2003, 01:38.

        Kommentar


        • #5
          Aber genau das will ich ja NICHT machen, habe ich doch gepostet ..

          Ich will wie gesagt, das zurückgelieferte von INSERT in pagename packen und dann mit pagename die ganze Zeit durch arbeiten ...

          BSP:

          Ich habe eine URI http://www.test.de/index.php?s=737b6&act=test ...

          Nun will ich durch das INSERT erst das ganze zeugs mit s=9u9ujjoi0 entfernen ...

          so nun habe ich die veränderte URI in pagename.

          - ab hier gehts nimmer -

          Nun will ich mit dem pagename(das zuvor mit dem INSERT bearbeitet wurde), folgende IFs machen ...

          Code:
          IF(pagename REGEXP'^domain.de', INSERT(pagename, 1, länge der domain, ''), IF(pagename REGEXP '^domain2.de ... usw ....

          Kommentar


          • #6
            vielleicht verstehe ich nicht was du willst, aber ich versuch's ...
            leider weiß ich immer noch nich wirklich wo dein problem ist?

            liegt es an den zuwenigen verzweigungen im if ?

            dann nimm:
            Code:
            CASE WHEN (INSERT(pagename, 1, laenge, '') == 'domain1') THEN string_oder_spalte WHEN (INSERT(pagename, 1, laenge, '') == 'domain2') THEN string_oder_spalte usw. ... (optional nach dem letzten WHEN ..THEN) ELSE ... END
            und wenn es das auch nicht ist, dann gib mal ein vernünftiges beispiel an
            Zuletzt geändert von graf; 29.06.2003, 02:10.

            Kommentar


            • #7
              besser ist noch, weil dann hast du nur ein INSERT

              CASE INSERT(pagename, 1, 35, '') WHEN "domain1" THEN irgendwas WHEN "domain2" THEN irgendwasanderes ... (optional) ELSE nixda END

              Kommentar


              • #8
                Ich glaube du verstehst es echt net
                Noch ein besseres hmm ...

                Ich habe eine Tbl:

                id | uri
                1 | http://www.domain.de/index.php?act=ddd&s=fdf
                2 | domains.de
                3 | http://domains.de/index.php?act=f
                4 | www.domain5.de/?s=fdasfsdf
                5 | domain2.de/test.html
                6 | domain5.de/text.cgi
                usw ...

                Man sieht also, das die Domains nicht gleich sind und sehr verschieden aufgebaut sind.

                So nun will ich die domains auslesen und anzeigen, somit dann die ausgabe folgendermassen aussieht:

                domain | count
                domain.de | 1
                domains.de | 2
                domain5.de | 2
                domain2.de | 1

                So nun habe ich folgendes:

                Code:
                COUNT(pagename) countpagename //wie oft kommt die domain vor
                
                INSERT(pagename, 1, 35, '') pagenameb //Entferne das ?|&s=32 .. das hier ist noch net ganz fertig, sprich hier wird dann noch per REGEXP geprüft, ob s überhaupt da ist, und an welcher stelle es steht ...
                
                // ab hier gehts nimmer, er will einfach net pagenameb verwenden .. 
                IF(pagenameb = '', 1 // wenn die uri leer ist, dann 1
                
                replaceOwnUrlInMySQL() // das ist eine rekursive funktion, die aus der uri alle domains entfernt sprich [url]http://www.domain[/url] oder domain.de oder [url]www.domain.de,[/url] das wird alles gekilled ...
                
                // pro aufruf der funktion, wird jedesmal folgendes zurückgegeben
                // ,IF (pagenameb REGEXP '^$domainstotrack[0]['domains'][$depth]', INSERT(pagenameb, 1, strlen($domainstotrack[0]['domains'][$depth], '')
                
                ) pagenamec
                
                FROM.
                tbl
                GROUP BY
                pagenamec
                so ausführlicher gehts glaub nimmer

                Kommentar


                • #9
                  was das soll weiß ich nicht
                  Code:
                  INSERT(pagename, 1, 35, '') pagenameb
                  also ich weiß nicht was das pagenameb sein soll, denn das insert wird es dadrin nicht ablegen

                  dein pagenameb IST das INSERT(pagename, 1, 35, '') und damit arbeitest du auch und dann kommt du auch 100% mit
                  CASE WHEN ... THEN ... WHEN ... THEN ... ELSE ... END
                  aus

                  Kommentar


                  • #10
                    Es wird dort aber "abgelegt", probiere es aus wenn du willst

                    Mit Case würde es zwar gehen, allerdings wollte ich das INSERT(pagename, 1, 35, '') nur einmal schreiben/aufrufen.

                    Und wenn ich das mit Case mache, müsste ich es min. 2 mal schreiben/aufrufen, zusätzlich fällt dann nochmal ein INSERT für die Domain an.

                    CASE WHEN REGEXP '^domain\.de', INSERT(INSERT(pagename, 1, 35, ''), 1, längevondomainde, '') THEN INSERT(INSERT(pagename, 1, 35, ''), 1, längevondomainde, '') ...

                    Aber das mit CASE etc. ist ja auch egal, mir geht es nur darum:

                    INSERT(pagename, 1, 35, '') pagenameb, geht ja und pagename b enthält dann auch das resultat ...
                    Aber wieso kann ich in der SQL Abfrage mit pagenameb NICHT arbeiten???

                    Kommentar


                    • #11
                      - es heisst AS pagenameb
                      - du kannst keine funktionen mit aliases als parameter aufrufen

                      Kommentar


                      • #12
                        - das AS ist optional ...
                        - verstehe ich nciht so ganz ... Meiste das geht net: INSERT() pagenameb ?
                        wenn ja, DOCH DAS GEHT ...

                        Kommentar


                        • #13
                          lies dir deine fehlermeldung durch

                          ich schätze da steht sowas wie "unknown column pagenameb ... "
                          Zuletzt geändert von graf; 29.06.2003, 19:50.

                          Kommentar


                          • #14
                            ja das steht da aber NUR, wenn ich versuche mit pagenameb weiterzu arbeiten ..

                            Und genau das ist es ja, wieso geht das net ?? entweder ich steh voll aufm schlaub oder ach ka ..

                            aber es liegt net am AS etc.

                            Kommentar


                            • #15
                              ich habe schon geschrieben, woran es liegt

                              Kommentar

                              Lädt...
                              X