[MySQL 4.0] LOCATE mit mehreren Keywords?

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

  • [MySQL 4.0] LOCATE mit mehreren Keywords?

    Angenommen man hat folgende Zeichenkette:

    string = 'Ich bin eine kleine Zeichenkette. Niemals werdet ihr meine Satzeichen finden! Oder etwa doch?'

    Nun möchte ich die Position des Zuerst vorkommenden Satzzeichens bestimmen also in dem Fall die von dem Punkt.
    Wenn ich jetzt nur nach dem Punkt suchen würde, dann wüsste ich wie es geht LOCATE( '.', string ) bedauerlichwerweise nimmt locate nur ein Zeichen zum suchen auf.
    daniel-portal.com/games Free Games and more

  • #2
    Code:
    SELECT
      MIN(
        LOCATE('.', string),
        LOCATE('!', string),
        LOCATE('?', string)
      )
    FROM ...
    Schon damit versucht?

    Kommentar


    • #3
      Nein aber laut dem Manual nimmt MIN() auch nur einen Parameter an, habs grad dann trotzdem mal probiert, funktioniert aber leider nicht.

      Haste vielleicht noch ne andere Idee?
      daniel-portal.com/games Free Games and more

      Kommentar


      • #4
        Ups, sorry.

        Nächste Idee wäre mit UNION zu arbeiten. Folgende Query habe ich grad getestet.
        Code:
        SELECT MIN(u.pos) FROM (
          ( SELECT LOCATE('.', 'foo.bar!baz?') pos )
        UNION
          ( SELECT LOCATE('!', 'foo.bar!baz?') pos )
        UNION
          ( SELECT LOCATE('?', 'foo.bar!baz?') pos )
        ) AS u
        Auf dich übertragen wäre es
        Code:
        SELECT MIN(u.pos) FROM (
          ( SELECT LOCATE('.', string) pos FROM ... )
        UNION
          ( SELECT LOCATE('!', string) pos FROM ... )
        UNION
          ( SELECT LOCATE('?', string) pos FROM ... )
        ) AS u
        Vielleicht gehts auch einfacher, aber immerhin sollte es so überhaupt erstmal funktionieren.

        Kommentar


        • #5
          Okay das würde dann vielleicht ausreichen, um die Zahl auszugeben, aber ich möchte die Zahl ja in der Query weiterverwerwenden bis jetzt habe ich:

          PHP-Code:
          SELECT b.IDb.titleb.descb.imgb.author_idb.last_editb.date,
                              IF( {
          $a['short_entrys']} = 1,
                                  IF( 
          LENGTH(b.content) > {$a['short_entry_len']},
                                      IF( 
          LOCATE'.'SUBSTR(b.content, {$a['short_entry_len']}, LENGTH(b.content)-{$a['short_entry_len']}) ),
                                          
          LEFTb.contentLOCATE'.', (SUBSTR(b.content, {$a['short_entry_len']}, LENGTH(b.content)-{$a['short_entry_len']}) ) )+{$a['short_entry_len']}),
                                          
          LEFTb.content, {$a['short_entry_len']} )
                                      ),
                                      
          b.content
                                  
          ),
                                     
          b.content 
                              
          ) AS content 
          daniel-portal.com/games Free Games and more

          Kommentar


          • #6
            Kannst du das zunächst so umbrechen/formatieren, dass man nicht nach rechts scrollen muß? Danke.

            Und ich weiß gar nicht, wo da jetzt die MIN-Geschichte rein soll. Aber du kannst dem Wert mit

            MIN(u.pos) minpos

            einen Namen geben und dann weiterverwenden.

            Kommentar

            Lädt...
            X