Per Script letzte Zeile ausgeben [gelöst]

rusty-spoon

New member
Hallo alle zusammen,

Ich möchte per PHP Script die letzte Zeile einer Tabelle ausgeben, dass Primary Key Feld der Tabelle heißt 'contentnr' und hat das Attribut 'AUTO_INCREMENT' und erhöht sich logischerweise bei jedem Neueintrag um eins.

Jetzt habe ich mir gedacht ich lasse mir einfach die Anzahl der Zeilen per mysql_num_rows() ausgeben, speichere den Wert in eine Variable und verwende diese in der WHERE Bedingung:

Code:
		// Daten ausgeben
		$sql = "SELECT * FROM mcs_inhalte";
		$ergebniss = mysql_query($sql, $Server);

		$num_rows = mysql_num_rows($ergebniss);
		echo "$num_rows ";


  // hier wird noch nicht die letzte Zeile aufgelistet sondern nur eine Resource ID angezeit		
		$sql = "SELECT * FROM mcs_inhalte WHERE contentnr = $num_rows";
		$ergebniss = mysql_query($sql, $Server);
		echo $ergebniss;
ich bekommen nur folgende Ausgabe:

Code:
20 Resource id #6
sieht einer den Fehler den ich mache?
oder kann ich das Ergebnis von mysql_num_rows(); nicht in einer WHERE Bedingung nutzen weil es sich auf eine andere Ergebnistabelle bezieht?

Vielen Dank im vorraus

rusty-spoon
 

metax.

New member
Hallo,
warum nutzt du nicht die SQL-Funktion max()?
Code:
$sql = "select * from mcs_inhalt where contentnr = max(contentnr)";
$result = mysql_query($sql), $server)
$row = mysql_fetch_assoc($result);

echo $row['spalte_schiessmichtot'];
edit: oder noch besser:
Code:
$sql = "select * from mcs_inhalt order by contentnr desc limit 1";
...
mfg, metax.
 

Oi!Alex

Member
Original von metax.
...
Code:
$sql = "select * from mcs_inhalt order by contentnr desc limit 1";
...
...
Das ist wohl die übliche Prozedur soetwas anzugehen, nur so als Tip ersetze das * lieber durch konkrete Tabellen bezeichnungen (damit nur Daten selectiert werden die du benötigst) - man sollte auch in kleinen projekten sauber und performant programmieren.

*edit*
Achja und konventionen einhalten ist auch hübsch gerade um auch die SQL Abfrage besser lesen zu können also:

SELECT spa1, spa2, spa3 FROM tab ORDER BY spa1 DESC LIMIT 1;
 

M.D.Geist

Member
Hallo rusty

Du bekommst keine Ausgabe weil "mysql_query()" nur einen Zeiger auf einen Datensatz zurück gibt. Um an den/die Datensätz(e) ranzukommen musst du den Zeiger z.b. an "mysql_fetch_array()" übergeben.

Code:
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
echo $row['spaltenname1'];
echo $row['spaltenname2'];
...
Achtung: Das obige Beispiel ist nur sinnvoll wenn du nur 1 Datensatz ausgeben willst. Ansonsten musst du noch eine Schleife um "mysql_fetch_array()" bauen. Die Funktion setzt dann den Zeiger bei jedem Aufruf auf den nächsten Datensatz bis das Ende erreicht ist.
 

rusty-spoon

New member
Danke für die vielen Antworten,

ich habe es jetzt wie folgt gelöst:

Code:
		$sql = "SELECT contentnr, ueberschrift, inhalt, status FROM mcs_inhalte ORDER BY contentnr DESC LIMIT 1";
		$ergebniss = mysql_query($sql, $Server);
		$daten = mysql_fetch_array($ergebniss);
		echo $daten['contentnr']." ";
		echo $daten['ueberschrift']." ";
		echo $daten['inhalt']." ";
		echo $daten['status']." ";
Das mit dem Zeiger habe ich schon vermutet war mir aber noch nicht im klaren darüber wie ich die Ergebnisse Abfange.

viele Grüße
rusty
 
Oben