Ankündigung

Einklappen
Keine Ankündigung bisher.

Nur ganze Wörter auslesen?!

Einklappen

Neue Werbung 2019

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

  • Nur ganze Wörter auslesen?!

    Hallo,

    ich arbeite zur Zeit an einem CMS, welches auch beinahe fertig ist. Es gibt jedoch ein Problem. Die Gallerieeinträge / Fotos welche den Inhalt des Blogs darstellen können mit Tags versehen werden. Z.B. in einer Tag Cloud (aber auch an anderer Stelle) wird geguckt, wie oft ein Tag in den ganzen Einträgen vorkommt. Dies wird bisher so gemacht:

    PHP-Code:
    $bilder_mit_tag_abfrage mysql_query("SELECT id FROM tabelle WHERE INSTR(tags, '".mysql_real_escape_string($tagname)."')>0");
    $bilder_mit_tag mysql_num_rows($bilder_mit_tag_abfrage); 
    In der Tabelle in der die Einträge gespeichert sind werden die Tags in einer eigenen Spalte für jeden Eintrag in folgender Form abgelegt: "Tag 1, Schlagwort 1, Bla 3" (Also durch Kommas getrennt)

    Das Problem: Wenn mehrmals verwendete Tags z.B. "Tag 1", Schlagwort 1" oder so heißen und ein nur EIN MAL verwendeter Tag z.B. "ag", wird für diesen nur ein mal verwendeten Tag angezeigt, dass er viel öfter vorkommt (Da "ag" eben in "Tag 1" und "Schlagwort 1" vorkommt. Es soll aber für den Tag "ag" angezeigt werden, dass er eben nur ein mal vorkommt.

    Wie kann ich das umgehen? INSTR scheint sich eher weniger gut zu eignen.

    Danke sehr!


  • #2
    Das Problem: Wenn mehrmals verwendete Tags z.B. "Tag 1", Schlagwort 1" oder so heißen und ein nur EIN MAL verwendeter Tag z.B. "ag", wird für diesen nur ein mal verwendeten Tag angezeigt, dass er viel öfter vorkommt (Da "ag" eben in "Tag 1" und "Schlagwort 1" vorkommt. Es soll aber für den Tag "ag" angezeigt werden, dass er eben nur ein mal vorkommt.
    Geht das auch in deutsch?

    Und:

    ich arbeite zur Zeit an einem CMS, welches auch beinahe fertig ist.
    PHP-Code:
    mysql_query(...) 
    Dreh noch eine Runde, mysql_ Erweiterung ist veraltet und wird bald nicht mehr funktionieren, bau es am besten gleich um auf PDO oder mysqli_ mit Prepared Statements.

    http://php.net/manual/en/migration55.deprecated.php

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      der TE emint wohl, dass substings bei strings mitgezählt werden, oder sowas.
      @TE: suche doch nach dem string(tag)und und zähle die ergebnisse.

      Kommentar


      • #4
        Das dachte ich mir zuerst, dann aber nach dem Schluss hier war ich mir nicht mehr so sicher...

        Da "ag" eben in "Tag 1" und "Schlagwort 1" vorkommt. Es soll aber für ... "ag" angezeigt werden, dass er eben nur ein mal vorkommt.
        Der TE möge sprechen
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Naja, prinzipiell ist es *fast feinstes, (syntax-)fehlerfreies Deutsch Nur vielleicht etwas wirsch ausgedrückt. Was ich meinte ist Folgendes:

          Es sollen nur ganze Wörter gefunden werden, keine Teile davon. Wenn also Haus1, Haus2, Haus3 und aus in der Tabelle stehen und per INSTR nach aus gesucht wird, wird es 4 mal gefunden, da aus in allen 4 Wörtern vorkommt. Es soll aber nur das eine mal gefunden werden, dass es auch tatsächlich als ganzes Wort vorhanden ist.

          Achja: Dass es leider tlw. veraltet ist weis ich, werde alles einheitlich aktualisieren, wenn die Seite fertig ist.

          Kommentar


          • #6
            [verlesen]
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              FIND_IN_SET() oder RLIKE() oder Volltextindex/Suche oder normalisieren...

              Kommentar


              • #8
                Danke! Werde mich mal damit befassen.

                Kommentar


                • #9
                  So, was ich vorhin noch schreiben wollte, musste aber erst nochwas raussuchen... Hatte das auch mal gebraucht und (wie erc oben schon gesagt hat) das mit FIND_IN_SET hinbekommen.

                  In der Tabelle in der die Einträge gespeichert sind werden die Tags in einer eigenen Spalte für jeden Eintrag in folgender Form abgelegt: "Tag 1, Schlagwort 1, Bla 3" (Also durch Kommas getrennt)
                  Versuch es mal so, ob das so hinhaut:

                  PHP-Code:
                  " ... WHERE FIND_IN_SET('".mysql_real_escape_string($tagname)."', tags) > 0"
                  Ev. musst du vorher noch schauen, das du die Leerzeichen nach den Kommas rausnimmst, versuch das mal so:

                  PHP-Code:
                  " ... WHERE FIND_IN_SET('".mysql_real_escape_string($tagname)."', REPLACE(tags, ', ', ',')) > 0"
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar

                  Lädt...
                  X