MySQL: bei Suchanfrage Spalte mit Zeilennummer erstellen
Anatol
- datenbank
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
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
stichwort User Variables
Ja, das war´s! So funktionierts:
set @pos = 0;
select @pos:=@pos+1 as pos, zutaten.* from zutaten where kategorie = 'Gemüse';
Danke!
Anatol
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>
?>
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