Seite 1 von 1

SELECT MAX(id) liefert in phpmyadmin anderen Wert

Verfasst: 08.08.2007 19:27
von mgutt
Hallo,

also ich kann es mir im Moment nicht erklären.

Die Datenbank umfasst X Millionen Einträge.

In phpmyadmin erhalte ich exakt das Ergebnis, wie laut phpmyadmin Zeilen in der Datenbank sind.

Wenn ich aber den MAX(wert) per php Script abrufe, dann erhalte ich genau 1000 weniger.

Also sagen wir ich hätte laut phpmyadmin 12.001.000 Zeilen, so erhalte ich mit meinem Script 12.000.000 als höchste ID.

Ich muss dazu sagen, dass die Datenbank immer um exakt 1000 Zeilen vergrößert wurde in sehr kurzer Zeit.

Aber ich verstehe einfach nicht, warum die absolut identische Abfrage in phpmyadmin ein anderes Ergebnis liefert als in php.

In php mache ich es wie immer (hat ja ein paar Millionen Zeilen lang funktioniert ;) ). Ich lese die MAX(id) aus (mysql_query und mysql_fetch_row) und füge dann ab da die nächsten 1000 Zeilen hinzu. Hat ca. 6 Stunden lang funktioniert.

Wenn ich übrigens SELECT id mit ORDER BY id DESC und LIMIT 1 mache, dann stimmt die id wieder. Aber bei MAX(id) muss ja irgendwo ein Fehler sein :-?

Datenbank kann ja nicht korrupt sein, wenn die in phpmyadmin richtig ausgegeben wird oder?

Verfasst: 08.08.2007 19:40
von Pyramide
Hast du es mal mit einem ganz simplen Code versucht (dreizeiler)? Wenn es in phpMyAdmin funktioniert, liegt der Fehler nämlich mit an Sicherheit grenzender Warscheinlichkeit irgendwo in deinem Script - phpMyAdmin verwendet schließlich auch nur die mysql_* Funktionen.

Verfasst: 08.08.2007 21:42
von mgutt
Das ist nur ein Dreizeiler, zwei um genau zu sein:

Code: Alles auswählen

$sql = "SELECT MAX(id) as max
		FROM table";
if ( !($result = @mysql_query($sql)) )
{
	die('db error');
}
if ( $row = @mysql_fetch_row($result) )
{
	$max = intval($row[0]);
}
@mysql_free_result($result);
Nachdem ich jetzt eine Weile ORDER BY genommen habe, funktioniert der MAX() wieder.

Ich nehme jetzt aus Spaß mal wieder MAX(). Ich sag bescheid, wenn das wieder passiert. Sind noch ein paar Millionen ;)

Verfasst: 08.08.2007 22:13
von PhilippK
Führst du in phpMyAdmin auch die Abfrage

Code: Alles auswählen

SELECT MAX(id) as max 
      FROM table
aus?

Gruß, Philipp

Verfasst: 09.08.2007 02:30
von mgutt
Jo, hab sie 1:1 kopiert. Und das nicht nur einmal. Sogar alle Fenster neu aufgemacht, weil ich schon an ein Cacheproblem dachte. Aber hat nicht geholfen.

Ich habe mir dann per print_r() die $row ausgeben lassen und da war eben diese ID mit 1000 weniger drin.

Sowohl bei der Abfrage in phpmyadmin, als auch auf der Seite wo man die Anzahl aller Zeilen pro Tabelle angezeigt bekommt, konnte man dagegen das korrekte Ergebnis sehen.