[MSSQL] Tabellenname als Teil-Ergebnis eines SELECT-Befehls?

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

  • [MSSQL] Tabellenname als Teil-Ergebnis eines SELECT-Befehls?

    Heyho Leute!
    Ich habe folgendes Problem:
    Ich habe mehrere Tabellen in einer Datenbank, die ich per match-Befehl einer Mysql-Volltextsuche unterziehen will. Dabei will ich aber außer der 'id', dem 'artikeltext' und dem 'rang' noch jeweils die entsprechende Tabelle pro Datensatz ausgegeben haben, damit ich nachher noch unterscheiden kann, aus welcher Tabelle welcher Datensatz stammt.
    Der Mysql-Befehl (für eine Tabelle) sieht etwa folgendermaßen aus:

    Code:
    mysql> SELECT id, artikeltext, MATCH (titel,artikeltext) AGAINST (
        -> 'Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang
        -> FROM artikel WHERE MATCH (titel,artikeltext) AGAINST
        -> ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen');
    
    +----+----------------------------------------------------------------+-----------------+
    | id | artikeltext                                                    | rang            |
    +----+----------------------------------------------------------------+-----------------+
    |  4 | 1. Lassen Sie mysqld nie als root laufen. 2. Normalisieren ... | 1.5055546709332 |
    |  6 | Wenn er korrekt konfiguriert ist, ist MySQL ...                |   1.31140957288 |
    +----+----------------------------------------------------------------+-----------------+
    Es wäre nett, wenn jemand in der Lage wäre, diesen so zu ergänzen. dass außerdem noch der Tabellenname als Ergebnis geliefert wird. Vielen Dank!

  • #2
    Re: [MSSQL] Tabellenname als Teil-Ergebnis eines SELECT-Befehls?

    Original geschrieben von 123456
    Code:
    mysql> SELECT id, artikeltext, MATCH (titel,artikeltext) AGAINST (
        -> 'Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang
        -> FROM artikel WHERE MATCH (titel,artikeltext) AGAINST
        -> ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen');
    du hast doch hier nur eine tabelle drin, und deren namen kennst du schon

    wenndu unbedingt willst...
    Code:
    SELECT 
      id, 
      artikeltext, 
      MATCH (titel,artikeltext) 
        AGAINST ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang,
      'artikel' tabellenname
    FROM 
      artikel 
    WHERE 
      MATCH (titel,artikeltext) 
        AGAINST ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen'
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      *juppie* Vielen, vielen Dank für die schnelle Hilfe!

      Jetzt habe ich noch ein Problem:
      Warum kann ich keine Volltextsuche du verschiedene Spalten gleichzeitig durchführen? hier wäre das 'titel' und 'artikeltext'. Das erscheint ein Fehler wie:

      Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in datei.php on line xyz

      Einzeln kann ich die Spalten-Kohärenz prüfen, nur zusammen eben nicht. Laut Hilfe auf mysql.de ist die Spalten-übergreifende Abfrage wie im Beispiel jedoch möglich..

      Code:
      mysql> SELECT id, artikeltext, MATCH (titel,artikeltext) AGAINST (
          -> 'Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang
          -> FROM artikel WHERE MATCH (titel,artikeltext) AGAINST
          -> ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen');

      Kommentar


      • #4
        wofür hast du denn full text indizes angelegt?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          sorry, hatte den Fulltext-Index falsch gesetzt. Ich habe in phpmyadmin einfach bei den entsprechenden Spalten auf Fulltext geklickt und so einen unabhängigen fulltext-index pro spalte erzeugt und keinen zusammenhängenden.

          Ist es denn möglich mit dieser Abfrage auch mehrere Tabellen mit dem gelichen Aufbau zu durchsuchen?

          Ich habe hier einfach die Tabellen 'weiteres' und 'usw' ergänzt aber das liefert trotz ->korrekt ;-) gesetztem Fulltext-Index einen Fehler.


          Code:
          mysql> SELECT id, artikeltext, MATCH (titel,artikeltext) AGAINST (
              -> 'Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang
              -> FROM artikel,weiteres,usw WHERE MATCH (titel,artikeltext) AGAINST
              -> ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen');

          Kommentar


          • #6
            die da wäre?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              was heißt "die da wäre?"?

              ich habe 5 Tabellen, die ich mit der FULL-Text-Abfrage in die Ergebnisse einfließen lassen will. Sie haben alle den gleichen Aufbau und die gleichen Indexe, so dass es super wäre, mit einer Select-Anweisung die Datensätze aller Tabellen in die Suche einzuschließen.
              (Um nachher herausfinden zu können, welche Daten aus welcher Tabelle stammen habe ich ja auch den Tabellenname pro Datensatz übergeben.->mein erstes Anliegen)

              Kommentar


              • #8
                "die da wäre" bedeutet, dass du mal die Fehlermeldung posten sollst, wenn ich mich nicht irre.

                Wenn du alle Tabellen durchsuchen willst, schreibe sie doch einfach alle ins FROM bei der SELECT-Anweisung.

                Anders geht es glaube ich überhaupt nicht.
                it's not a bug,
                it's a feature!

                Kommentar


                • #9
                  Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\datei.php on line 25

                  tja, also eine select-anweisung mit " FROM tabelle1,tabelle2 " funzt nicht

                  Kommentar


                  • #10
                    Das bedeutet, dass du mit mysql_fetch_row() das Ergebnis nicht auswerten kannst.

                    Probiere mal mysql_num_rows($dein_resultat);
                    PHP-Code:
                    $anzahl mysql_num_rows();
                    for (
                    $i=0$i<$anzahl$i++)
                    {
                    $name mysql_result($res$i"name");
                    ...
                    ...

                    it's not a bug,
                    it's a feature!

                    Kommentar


                    • #11
                      also, mit der select-anweisung funktioniert das anscheinend bei der full-text-suche mit mehreren Tabellen nicht oder ich bin echt zu blöd dazu (wovon ich jetzt mal nicht ausgehe )
                      Das scheint anders als bei der "normalen" select-anweisung zu sein, wo man einfach die Tabellen per Komma getrennt auflisten kann..

                      Hat noch irgendwer eine Ahnung?

                      Kommentar


                      • #12
                        PHP-Code:

                        $suchwort 
                        "fahrt schnee"// Suchanfrage

                        $suchtabelle "flussbeschreibungen,fahrtenberichte";   // zu durchsuchende Tabellen !!!!!!!!!!!!!!!!!!!!

                        $suchtabellenname ucfirst($suchtabelle);
                        $suchzelle "`thema`,`artikel`"// Fulltext-zelle
                        $ergebniszellen "id,thema,artikel"// Ergebnis-Zellen außer wahrscheinlichkeit und Tabellenname

                        echo "<b><i>Suche nach '".$suchwort."' :</i></b><br><br>";

                        $query "SELECT
                        MATCH ("
                        .$suchzelle.")
                        AGAINST ('"
                        .$suchwort."'),'".$suchtabellenname."' tabellenname,
                        "
                        .$ergebniszellen."
                        AS rang FROM "
                        .$suchtabelle."
                        WHERE MATCH ("
                        .$suchzelle.")
                        AGAINST ('"
                        .$suchwort."') ORDER BY MATCH (".$suchzelle.")
                        AGAINST ('"
                        .$suchwort."') DESC";

                        $nickresult mysql_query($query);
                        while (
                        $row mysql_fetch_row ($nickresult)) {

                        echo 
                        "$row[1]$row[3] (Id:$row[2])<br>";
                        // echo "Artikel: $row[4]<br>";

                        // Sterne
                        $x=0;
                        $sterne "";
                        $anzahlsterne round($row[0]*4);
                        while (
                        $x $anzahlsterne)
                        {
                        $x $x+1;
                        $sterne $sterne."<img src=\"../images/stern.gif\">";
                        }

                        echo 
                        "Treffer: $sterne &nbsp; (".round($row[0]*100)." %)<br><br>";



                        Sorry, aber kannst du das hier anpassen?

                        Kommentar


                        • #13
                          PHP-Code:
                          $suchwort "fahrt schnee"// Suchanfrage

                          $suchtabelle "flussbeschreibungen,fahrtenberichte";   // zu durchsuchende Tabellen !!!!!!!!!!!!!!!!!!!!

                          $suchtabellenname ucfirst($suchtabelle);
                          $suchzelle "`thema`,`artikel`"// Fulltext-zelle
                          $ergebniszellen "id,thema,artikel"// Ergebnis-Zellen außer wahrscheinlichkeit und Tabellenname

                          echo "<b><i>Suche nach '".$suchwort."' :</i></b><br><br>";

                          $query "SELECT
                          MATCH ("
                          .$suchzelle.")
                          AGAINST ('"
                          .$suchwort."'),'".$suchtabellenname."' tabellenname,
                          "
                          .$ergebniszellen."
                          AS rang FROM "
                          .$suchtabelle."
                          WHERE MATCH ("
                          .$suchzelle.")
                          AGAINST ('"
                          .$suchwort."') ORDER BY MATCH (".$suchzelle.")
                          AGAINST ('"
                          .$suchwort."') DESC";

                          $nickresult mysql_query($query);

                          //////////////////////////////
                          // hier gehts los mit den Änderungen
                          $anzahl mysql_num_rows($nickresult);
                          for (
                          $i=0$i<$anzahl$i++)
                          {
                          $id mysql_result($nickresult$i"id");
                          $thema mysql_result($nickresult$i"thema");
                          $artikel mysql_result($nickresult$i"artikel");
                          //////////////////////////////////
                          echo "$id$thema$artikel<br />";

                          // Sterne
                          $x=0;
                          $sterne "";
                          $anzahlsterne round($row[0]*4);
                          while (
                          $x $anzahlsterne)
                          {
                          $x $x+1;
                          $sterne $sterne."<img src=\"../images/stern.gif\">";
                          }

                          echo 
                          "Treffer: $sterne &nbsp; (".round($row[0]*100)." %)<br><br>";

                          // Ende for-Schleife 
                          ACHTUNG: ungetestet!!!
                          it's not a bug,
                          it's a feature!

                          Kommentar


                          • #14
                            vielen Dank für deine Mühe!
                            Dieser Code funktioniert zwar genauso wie meiner (ist ja auch nicht viel anders) jedoch auch nicht mit mehr als einer Tabelle. Schad, immer noch kein Fortschritt. Ich glaube ich muss doch arrays verwenden - auch wenn es dann langsam und komplizert wird...
                            Ich glaube nicht, dass da noch jemand eine Lösung hat, oder?

                            Kommentar


                            • #15
                              die fehlermeldung, die du gepostet hast, ist nicht die, die ich haben wollte

                              mach aus dem mysql_query('dein select'); (ich meine das mit mehr als einer tabelle) mal
                              PHP-Code:
                              msql_query('dein select') or die(mysql_error()); 
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X