Mehrere Keywords abfragen

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

  • Mehrere Keywords abfragen

    Hallo zusammen,

    ich habe verschiedene Nachrichten (News) denen ich EIN Keyword zuweise.
    Im Frontend lasse ich diese Nachricht nun ausgeben und lasse gleichzeitig nach News suchen die das gleiche Keyword besitzen. Das funktioniert auch ohne Probleme. Jetzt möchte ich das ganze etwas erweitern so das ich mehrere Keywords in ein Feld eintrage und jedes durch Komma separierte Wort soll abgefragt werden.

    Also z.B. "telefon, bell, telekom"

    Ich würde das ganze jetzt mit Explode anhand der "Kommas" teilen und jeden Fund in einer WHILE durch eine SQL Abfrage schicken.
    So würde es auf jeden fall funktionieren, nur das ganze ist doch sicherlich sehr resourcenfressend. Ist mein Vorgehen so richtig oder könnte ich es irgendwie (viel) besser machen?

    Cu SusiSorglos
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    Zitat von SusiSorglos Beitrag anzeigen
    Hallo zusammen,

    ich habe verschiedene Nachrichten (News) denen ich EIN Keyword zuweise.
    Im Frontend lasse ich diese Nachricht nun ausgeben und lasse gleichzeitig nach News suchen die das gleiche Keyword besitzen. Das funktioniert auch ohne Probleme. Jetzt möchte ich das ganze etwas erweitern so das ich mehrere Keywords in ein Feld eintrage und jedes durch Komma separierte Wort soll abgefragt werden.

    Also z.B. "telefon, bell, telekom" ...
    Für diesen Zweck haben Datenbanken den Datentyp "Set" (Menge). MySQL kennt den auch: MySQL :: MySQL 5.7 Reference Manual :: 11.4.5 The SET Type

    Falls die Datenbank keinen Set-Typ hat oder dieser nicht genug "Keywords" für deine Aufgabenstellung bereitstellt, gibts auch nicht-triviale Lösungen:
    * Then each went to his own home - Tags: Database schemas
    * sql - Database Design for Tagging - Stack Overflow
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #3
      Davon würde ich absehen. Das würde bedeuten, dass man die Tabellenstruktur zur Laufzeit verändern muss. Dadurch kommt man irgendwann in Teufels Küche.

      Der SET-Type sollte nur für Werte verwendet werden, die sich zur Laufzeit niemals verändern und nur in Form von neuen Datenbank-Deployments aktualisiert wird.

      Besser wäre es eine Tabelle mit Keywords anzulegen.

      Kommentar


      • #4
        Naja, ich habe es eh nicht verstanden. Also habe ich es nochmal mit Explode(,) und dann die SQL-Abfrage in einer foreach zusammen gebastelt. Das funktioniert! Ich dachte nur, das gibt es was von Hause aus, was vielleicht schneller/besser ist.

        Dennoch THX
        PHP 8.0, MariaDB 10.5 auf U20.04

        Kommentar


        • #5
          Zitat von SusiSorglos Beitrag anzeigen
          Naja, ich habe es eh nicht verstanden. Also habe ich es nochmal mit Explode(,) und dann die SQL-Abfrage in einer foreach zusammen gebastelt. Das funktioniert!
          Ja, "funktioniert". Aber ist der falsche Weg und wird dir früher oder später große Probleme machen.

          Zitat von SusiSorglos Beitrag anzeigen
          Ich dachte nur, das gibt es was von Hause aus, was vielleicht schneller/besser ist.
          Ja, gibts. Nennt sich Normalisierung.

          Kommentar


          • #6
            Zitat von SusiSorglos Beitrag anzeigen
            Naja, ich habe es eh nicht verstanden.
            Was war daran unverständlich? Ich fand die Erklärungen im MySQL-Handbuch durchaus anfängerfreundlich ...

            Also habe ich es nochmal mit Explode(,) und dann die SQL-Abfrage in einer foreach zusammen gebastelt. Das funktioniert!
            Du fragtest explizit nach Alternativen zu PHP-Basteleien mit String-Funktionen.

            Ich dachte nur, das gibt es was von Hause aus, was vielleicht schneller/besser ist.
            Ja gibt es:
            Ich habe zwei Lösungswege aufgezählt.
            Hell hat dir den letzteren der beiden empfohlen.

            Zitat von h3ll Beitrag anzeigen
            Davon würde ich absehen. Das würde bedeuten, dass man die Tabellenstruktur zur Laufzeit verändern muss. ...

            Der SET-Type sollte nur für Werte verwendet werden, die sich zur Laufzeit niemals verändern und nur in Form von neuen Datenbank-Deployments aktualisiert wird.
            Ausgehend von ...
            Zitat von SusiSorglos
            ich habe verschiedene Nachrichten (News) denen ich EIN Keyword zuweise.
            ... sehe ich die Menge der Keywords als wenig veränderlich an.

            Dass die Keywords beim Anlegen der Tabelle festgelegt werden müssen, ergibt sich aus dem ersten Satz des Handbuch-Artikels zum Set-Datentyp (MySQL):

            Zitat von MySQL
            A SET is a string object that can have zero or more values, each of which must be chosen from a list of permitted values specified when the table is created.
            Besser wäre es eine Tabelle mit Keywords anzulegen.
            Nicht ohne Grund hatte ich zwei Links mit ein paar Dutzend alternativen Implentierungen fürs Keyword-Tagging ohne Set-Typen angehängt ...
            Zuletzt geändert von fireweasel; 17.03.2015, 21:21. Grund: typo
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar

            Lädt...
            X