"Count" Problem

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

ich möchte für ein Nachrichtenarchiv alle Einträge der Tabelle News anzeigen lassen außer den 4 letzten Einträgen. Dazu dachte ich mir ich zähle alle Einträge und lasse 4 vom Ergebnis abziehen.
Doch leider funktioniert das mit dem Count nicht wirklich. Ich bekomme bei folgendem Code immer "Resource id #36" als Ausgabe für $hilfe.

PHP:
$sql = 'SELECT count(*) FROM `news`';
$hilfe= mysql_query($sql);
echo $hilfe;

Kann mir jemand sagen warum?
 
also count ist nur um arrays zu zählen.
dein code
PHP:
$sql = 'SELECT count(*) FROM `news`'; 
$hilfe= mysql_query($sql); 
echo $hilfe;

müsste
PHP:
$sql = 'SELECT * FROM news'; 
$query = mysql_query($sql);
$count = mysql_num_rows($query) - 4; //die anzahl der ausgelesen datenreihen
$real_sql = "SELECT * FROM news LIMIT 0,".$count;
while($row = mysql_fetch_array($real_sql)){
  // hier kann du nun per array auf die werte der Reihe zugreifen
  echo $row['titel']; //gibt nun zb. den titel der News aus.
}
heissen
 
Probier mal Folgendes:
PHP:
<?php

	$query = "
		SELECT
		        COUNT(*)
		  FROM
		        `news`
		";
	$result = mysql_query($query);
	$query = "
		SELECT
		        …
		  FROM
		        `news`
		  LIMIT
		        ".( (int)mysql_result($result, 0) - 4 )."
		";
	$result = mysql_query($query);
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		…
	}

?>
Diese Variante sollte (zumindest bei großen Datenmengen) schneller laufen als xErYs Vorschlag.
 
Zuletzt bearbeitet:
Hi
nach dem SQL-Standard ist die Selectanweisung richtig, aber was sollen die Anführungszeichen vor dem Tabellennamen. Lass die mal weg und versuch es nochmal oder ist deine Tabelle wirklich so definiert?.

Versuch:

HTML:
 $query="Select count(*) from news";
 
und wieso das bitte? du machst lediglich int cast auf das Result der ersten sql.
Aber letzten endes bleibt die abgeleitete datenmenge die gleiche oder?
 
Meine Variante wird deshalb schneller sein, da einerseits keine überflüssigen Datensätze ausgewählt und gepuffert werden müssen und andererseits MySQL solche Abfragen optimiert:
GROUP BY hat gesagt.:
COUNT(*) ist darauf optimiert, das Ergebnis sehr schnell zurückzugeben, wenn es mittels eines SELECT von einer Tabelle abruft, wenn keine weiteren Spalten abgerufen werden und es keine WHERE-Klausel gibt.
 
und wie greift man dann auf diese Anzahl wieder zu? ;)
kenne diese Methode nämlich net aber lass mich gerne belehren.
 
xErY hat gesagt.:
PHP:
$sql = 'SELECT * FROM news'; 
$query = mysql_query($sql);
$count = mysql_num_rows($query) - 4; //die anzahl der ausgelesen datenreihen
$real_sql = "SELECT * FROM news LIMIT 0,".$count;
while($row = mysql_fetch_array($real_sql)){
  // hier kann du nun per array auf die werte der Reihe zugreifen
  echo $row['titel']; //gibt nun zb. den titel der News aus.
}

Ich bekomme die Meldung:
Warning: mysql_fetch_object(): 8 is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/phoenix2001/newsarchiv.php on line 221

Gumbo hat gesagt.:
Probier mal Folgendes:
PHP:
<?php

	$query = "
		SELECT
		        COUNT(*)
		  FROM
		        `news`
		";
	$result = mysql_query($sql);
	$query = "
		SELECT
		        …
		  FROM
		        `news`
		  LIMIT
		        ".( (int)mysql_result($result, 0) - 4 )."
		";
	$result = mysql_query($query);
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		…
	}

?>
Diese Variante sollte (zumindest bei großen Datenmengen) schneller laufen als xErYs Vorschlag.

Ich bekomme die Meldung:
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/phoenix2001/newsarchiv.php on line 220
01.01.1970 -


01.01.1970 -


01.01.1970 -


01.01.1970 -


01.01.1970 -

 
Zuletzt bearbeitet von einem Moderator:
Zurück