Ankündigung

Einklappen
Keine Ankündigung bisher.

Synonymsuche (PHP - MYSQL)

Einklappen

Neue Werbung 2019

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

  • Synonymsuche (PHP - MYSQL)

    Hey,
    vorab ist zu sagen, dass ich eine kleine Suche habe und in der gerne eine nicht zu "komplizierte und übermäßige" Synonysuche integriert hätte.

    Beispiel
    Tabelle Woerter:

    id|wort
    1 Auto
    2 Karre
    3 Fahrzeug
    4 Vehikel
    5 PKW
    6 Schlitten
    7 Kiste
    8 Karton
    9 Box
    10 Schachtel

    Tabelle Zuordnung:

    id|wortid|synonymid
    1 1 2
    2 1 3
    3 1 4
    4 1 5
    5 1 6
    6 1 7
    7 3 4
    8 7 8
    9 7 9
    10 7 10

    So kann man erkennen, dass Kiste zwar ein Synonym für Auto ist, aber Auto nicht unbedingt als Synonym für Kiste zu verstehen ist.

    Hiermit könnte ich das Synonym abfragen:
    Code:
    SELECT 
      w2.wort 
    FROM 
      woerter w 
      INNER JOIN zuordnung wxw
        ON w.id IN(wxw.wortid,wxw.synonymid) 
      INNER JOIN worte w2
        ON w2.id IN(wxw.wortid,wxw.synonymid) 
    WHERE 
      w.wort=@Mein_Suchwort
    GROUP BY
    w2.wort
    Ist das so zu empfehlen oder würdet ihr trotzdem noch was ändern?

    Letzes Problem bleibt, dass ich mir nicht genau erklären kann, wie ich das in die Suche mit einbauen kann, sodass wenn ich Auto suche auch im gleichen Atemzug die Ergebnisse der Synonyme aufgelistet werden.

    Hier ist der Anfang vom Quelltext, wo die Suche anfängt
    Eingabefeld:

    PHP-Code:
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
                       <div>
                        <input type="text" size="80" name="q" id="q"/>
                        <input type="submit" value="Suchen"/>
                        <div id="vorschlag"></div>
                       </div>
    </form>
    Anfang der Suche
    PHP-Code:
    if ($suche trim($_GET['q'])) {
         if (!
    get_magic_quotes_gpc()) $suche addslashes($suche);
         if (
    strlen($suche) > 50) die('Anfrage zu lang'); 

    Vielen Dank,
    Chinese

  • #2
    Hallo,

    da es sich dabei um eine (gerichtete) 1:n-Beziehung handelt, denke ich, dass es sich dabei um das einzig sinnvolle Schema handelt.
    Ich verschiebe das aber mal du den Datenbanken.

    Themenmoderation:
    [→] Verschoben von PHP-Einsteiger

    Kommentar


    • #3
      Hey, entschuldige :P

      so ich habe meinen Tabellenstruktur umgelegt - schaut übersichtlicher aus und ist auch einfacher, die joins versteh ich noch nicht ganz :P - und klappt soweit auch.
      Nur, dass derzeit nur Suchergebnisse angezeigt werden, wenn die in der Tabelle Synonyme vorhanden sind.
      Beispiel
      Tabelle Synonyme
      id | wort | synonym
      1 | auto | 1
      2 | karre | 1

      Wenn ich "auto" suche, was normalerweise Suchergebnisse liefert, liefert es diesmal keine, allerdings ist es nicht so, wenn ich "karre" suche, da werden mir die Ergebnisse von "auto" geliefert. So wie es sein soll für das Synonym.

      Hier ist der Code dazu noch einmal:
      PHP-Code:
      if ($suche trim($_GET['q'])) {                                
          require (
      "verbindung.php");                                        // Aufbau der Verbindung zur Datenbank
          
          
          
      $synonymabfrage "    SELECT wort
                               FROM `synonyme`
                              WHERE wort != '
      $suche'
                              AND (
                                  synonym = (
                                      SELECT synonym
                                      FROM synonyme
                                      WHERE wort = '
      $suche' )
                                  OR id = (
                                      SELECT synonym
                                      FROM synonyme
                                      WHERE wort = '
      $suche' )
                                  OR synonym = (
                                      SELECT id
                                      FROM synonyme
                                      WHERE wort = '
      $suche' )
                              )"
      ;
          
          
      $ergebnis mysql_query($synonymabfrage);

          while (
      $suche mysql_fetch_array($ergebnis) or die (mysql_error())) {
              
           if (!
      get_magic_quotes_gpc()) $suche addslashes($suche);
           if (
      strlen($suche) > 50) die('Anfrage zu lang');                // Länge der Buchstaben angeben

          
           
      $sbs preg_split('/\s+/'$suche[0]);
           foreach (
      $sbs as $sb) {
                
      $sb preg_replace('/\W/'''$sb);
                if (
      strlen($sb) >= 1$suchbegriffe[] = $sb;
           } 

      Kommentar


      • #4
        Hmm... hat keiner von euch klugen Köpfen eine Ahnung, wie ich weiter vorgehen könnte?

        PHP-Code:
        if ($suche trim($_GET['q'])) {
             if (!
        get_magic_quotes_gpc()) $suche addslashes($suche);
             if (
        strlen($suche) > 50) die('Anfrage zu lang');
             
            require(
        'verbindung.php');
            
             
        $synonymabfrage " SELECT wort
                                FROM `synonyme`
                                WHERE wort != '
        $suche[0]'
                                AND (
                                      synonym = (
                                        SELECT synonym
                                        FROM synonyme
                                        WHERE wort = '
        $suche[0]' )
                                      OR id = (
                                        SELECT synonym
                                        FROM synonyme
                                            WHERE wort = '
        $suche' )
                                      OR synonym = (
                                        SELECT id
                                        FROM synonyme
                                        WHERE wort = '
        $suche[0]' )
                                )"
        ;                    
            
              
        $ergebnis mysql_query($synonymabfrage);

              while (
        $suche mysql_fetch_array($ergebnis) or die (mysql_error())) {
        // Rest der Suche
        // Ende der While ^ Schleife
        // Ende der If-Schleife 
        Mit diesem Code kann ich ein Synonym suchen, das in der Tabelle Synonyme vorhanden ist.
        ( id | wort | synonym
        1 | auto | 1
        2 | karre | 1
        3 | 05 | 3
        4 | 5 | 3)

        Doch, das, was ich logischerweise gerne hätte, wäre, wenn $suche aus 2 Synonyme bestehen würde, (in diesem Beispiel könnte es "karre 5" sein und gefunden werden sollte "auto 05") dass das mit in das Suchergebnis mit einbezogen wird.

        Kompliziert, aber ich hoffe, ihr könnt mir helfen.

        Danke,
        Chinese

        Kommentar

        Lädt...
        X