Anatol: MySQL: bei Suchanfrage Spalte mit Zeilennummer erstellen

Hallo

ich stehe wohl gerade auf dem Schlauch und im Archiv habe ich nichts zu diesem Problem gefunden:

Ich möchte eine MySQL-Tabelle durchsuchen und bei der Suchausgabe eine Spalte hinzufügen, die die Zeilennummer (oder Position) der einzelnen Ergebnisse enthält.
Um es klarer zu machen, hier ein Beispiel:

Die Tabelle (kompletter Inhalt) sieht z.B. so aus:

Tabellenname: zutaten
+----+---------+-----------+
| id | name    | kategorie |
+----+---------+-----------+
|  1 | Apfel   | Obst      |
|  2 | Tomate  | Gemüse    |
|  3 | Gurke   | Gemüse    |
|  4 | Birne   | Obst      |
|  5 | Orange  | Obst      |
|  6 | Karotte | Gemüse    |
+----+---------+-----------+

Angenommen ich möchte jetzt nur Gemüse aufgelistet haben, dann ist die Suchanfrage einfach:

select * from zutaten where kategorie = 'Gemüse';

Ergebnis:

+----+---------+-----------+
| id | name    | kategorie |
+----+---------+-----------+
|  2 | Tomate  | Gemüse    |
|  3 | Gurke   | Gemüse    |
|  6 | Karotte | Gemüse    |
+----+---------+-----------+

Ich suche nun nach einer passenden Suchanfrage, um im Suchergebnis die Spalte Position (pos) hinzuzufügen, die aber je nach Suchanfrage erstellt werden soll, also nicht in der Datenbank gespeichert sein soll.
Das Ergebnis wäre dann:

+-----+----+---------+-----------+
| pos | id | name    | kategorie |
+-----+----+---------+-----------+
|   1 |  2 | Tomate  | Gemüse    |
|   2 |  3 | Gurke   | Gemüse    |
|   3 |  6 | Karotte | Gemüse    |
+-----+----+---------+-----------+

Bei einer etwas anderen Suche (z.B. mit '... order by name') wäre das Ergebnis:

+-----+----+---------+-----------+
| pos | id | name    | kategorie |
+-----+----+---------+-----------+
|   1 |  3 | Gurke   | Gemüse    |
|   2 |  6 | Karotte | Gemüse    |
|   3 |  2 | Tomate  | Gemüse    |
+-----+----+---------+-----------+

Um es so auszudrücken: ich weiß, dass die Antwort 42 ist, aber ich komme nicht auf die Frage...

Es wäre nett, wenn mir jemand auf die Sprünge helfen könnte.
Danke schonmal!

Anatol

  1. yo,

    Ich möchte eine MySQL-Tabelle durchsuchen und bei der Suchausgabe eine Spalte hinzufügen, die die Zeilennummer (oder Position) der einzelnen Ergebnisse enthält.

    stichwort User Variables

    http://dev.mysql.com/doc/mysql/en/variables.html

    Ilja

    1. stichwort User Variables

      http://dev.mysql.com/doc/mysql/en/variables.html

      Ja, das war´s! So funktionierts:

      set @pos = 0;
      select @pos:=@pos+1 as pos, zutaten.* from zutaten where kategorie = 'Gemüse';

      Danke!
      Anatol

  2. hy

    weis nicht ob ich dein problem richtig verstanden habe, aber warum probiert du es nicht mal so:

    <?
    $_DBNAME = "test";
    $db=@mysql_connect('127.0.0.1','root','');
    @mysql_select_db($_DBNAME,$db;
    $result=mysql_db_query(select * from zutaten WHERE kathegorie=Gemüse");
    $num = mysql_num_rows($result);

    echo '
    <table>
    <tr>
             <td>pos<td>
      <td><b>idtd>
      <td><b>name</td>
      <td><b>kathegorie</td>
            </tr>

    ';

    for($i=0;$i<$num;$i++)
    {
    $row=mysql_fetch_object($result);
    echo '
         <tr>
        <td align="center">'.$i+1.'</td>
        <td align="center">'.$row->id.'</td>
        <td align="center">'.$row->Wert_name.'</td>
        <td align="center">'.$row->kathegorie.'</td>
                             </tr> ';

    }

    echo "</table>

    ?>

    1. Hallo Barney,

      danke für den ausführlichen Code. Leider war das aber nicht, was ich gesucht habe, ich möchte nämlich in jeder $row[$i] die Position gespeichert haben. Natürlich ist sie ja irgendwie in $i vorhanden, und zur Not hätte ich die Position über PHP gelöst. Über die von Ilja angesprochenen User Variables bekomme ich aber das für meine Zwecke beste Ergebnis: https://forum.selfhtml.org/?t=104258&m=642706

      Trotzdem vielen Dank!
      Anatol