Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Volltextsuche MATCH AGAINST mit LEFT JOIN kombinieren.L

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.09.2003
    Ort
    nähe Münster
    Beiträge
    76

    Volltextsuche MATCH AGAINST mit LEFT JOIN kombinieren.L

    So hier mal mein Versuch in Datenbankabftragen von MySQL.

    PHP-Code:
        $sql="SELECT nummer,artikel,zusatz,brutto,lieferant,name";
        
    $sql.=" FROM artikelk WHERE MATCH (artikel) AGAINST";
        
    $sql.=" ('+$artikel' IN BOOLEAN MODE) LEFT JOIN adressen ";
        
    $sql.="ON kunde=lieferant"
    Also die Abfrage funktioniert bis zu 'LEFT JOIN' ganz gut. Liegt wohl daran das LEFT JOIN einfach von mir angehängt worden ist.

    Es gibt die beiden Tabellen "artikelk" und "adressen", die Variable "$artikel" sucht mir aus "artikelk" alle passenden Felder, bis auf "name" dieses Feld stammt aus der Tabelle "adressen". Die beiden Tabelle verknüpfen sich über die Felder "kunde" und "lieferant". Was aber nur eine Fehlermeldung auslößt

    In meinem Lehrbuch steht die Möglichkeit es mit temporären Tabellen zu versuchen.

    Auch hier mal mein Versuch:

    PHP-Code:
    <head>
    <title>check</title>
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <

    <?php
        $artikel
    =$HTTP_POST_VARS['artikel'];
        include(
    "funk.php");
        include(
    "verbind.php");

        
    $sqlt="CREATE TEMPORARY TABLE tmp";
        
    $sqlt.="SELECT nummer,artikel,zusatz,brutto,lieferant";
        
    $sqlt.=" FROM artikelk WHERE MATCH (artikel) AGAINST";
        
    $sqlt.=" ('+$artikel' IN BOOLEAN MODE)";
        
        
    mysql_query($sqlt)
        
        
    $sql="SELECT t.nummer,t.artikel,t.zusatz,t.brutto,t.lieferant,a.name";
        
    $sql.="FROM tmp AS t";
        
    $sql.="INNER JOIN adressen AS a ON t.lieferant=a.kunden";
        
        if (
    $res=send_sql($db,$sql)) {
        echo 
    "Abfrage: <br> $sql"; }
        
    tab_out($res);


        if (
    $res=send_sql($db,$sql)) {
        echo 
    "SQL-Kommando wurde ausgeführt";
        }
    ?>
    <br>
    <a href="suchlieferant.html">Neue Suche.</a><br><br>
    <a href="menue.html">Zur&uuml;ck zur Auswahl</a>
    </body>
    </html
    Freihändig Coden ist wohl noch nicht mein Ding, hier auf jeden Fall versuche ich erst ein Temporäre Tabelle zu erzeugen und die dann anschließend mit der Tabelle "adressen" zu verknüpfen, was aber nur zu einem Syntax Fehler führt.
    hold on.

  2. #2
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Hi Gutschy

    Ich kenne zwar "MATCH AGAINST" nicht, aber mir schein deine Syntax etwas "verdreht" zu sein. Versuch es doch einmal so
    PHP-Code:
    $sql="SELECT nummer,artikel,zusatz,brutto,lieferant,name";
        
    $sql.=" FROM artikelk LEFT JOIN adressen ";
        
    $sql.=" ON (kunde=lieferant) ";
        
    $sql.=" WHERE MATCH (artikel) AGAINST";
        
    $sql.=" ('+$artikel' IN BOOLEAN MODE) "
    IMO mußt du erst die Joins aufbauen bevor du mit der WHERE Klausel anfängst.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.09.2003
    Ort
    nähe Münster
    Beiträge
    76
    Danke Hans,

    hat super geklappt. "MATCH AGAINST" ist seit Version 3.23.23 dabei und in Version 4.0.1 noch verbessert worden. Hat einen ähnlichen Effekt wie 'like' oder '=',kann aber "ungefähr" vergleichen. So ne Art Fuzzy Logik. Gibt auch Treffer aus für Wörter die so ähnlich ausschauen.


    Edit:
    Genauer, wo es nur eine Teilübereinstimmung gibt.
    Geändert von Gutschy (26-05-2004 um 13:14 Uhr)
    hold on.

  4. #4
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Ist MATCH AGAINST eigentlich Bestandteil von Standard SQL?

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.09.2003
    Ort
    nähe Münster
    Beiträge
    76
    Tja, also mein Buch (Markt&Technik, MySQL4) beschreibt diesen Ausdruck unter dem Kapitel "Syntax und Verwendung von SQL in MySQL", dann hab ich noch bei Oracle kurz reingeschaut, die hat es glaub ich auch.

    Also ich schätze mal das es dazu gehört.
    hold on.

  6. #6
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Mir ist heute ein Buch untzergekommen, wo MATCH für Informix erklärt war, ohne AGAINST. Da sind die Metazeichen dann Bahs - like.

    Also ich vermute, dass das in der Form ein Feature von MySQL ist und nicht zum Standard SQL zu zählen ist.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    Laut Date/Darwen "SQL - der Standard" ist MATCH Bestandteil von SQL2, aber in einer ganz anderen Bedeutung, nämlich zum Vergleich einer Zeile mit einer Tabelle, die von einem Subselect zurückgegeben wird. Einziges optionales Schlüsselwort bei MACTH ist UNIQUE. Date gibt dazu folgendes Beispiel:
    Code:
    SELECT * FROM sp WHERE NOT (sp.sno MATCH UNIQUE (SELECT s.sno FROM s))
    Wenn UNIQUE also nicht angegeben ist, dann ist MATCH äquivalent zu einem normalen Subselect mit IN.

    Ein Vergleich mit einer Art regulären Ausdrücken ist in SQL3 mit dem Operator SIMILAR TO möglich.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •