PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nach Eingabe neues Datensatzes funktioniert Abfrage nicht mehr


mallmis
12.02.2008, 20:02:40
Hallo liebe Leute,

habe ein Problem mit meiner MySql Datenbank bei Host Europe. Habe dort eine Datenbank mit vier Tabellen, wovon jede etwa 30 Felder besitzt. Die erste Tabelle hat ein id Feld auto increment. Die id wird in den anderen Tabellen auch eingfügt um eine Verbindung von der Basistabelle herzustellen.
Habe nun schon etwa 200 Datensätze über eine selbst gebastelte Eingabemaske eingegeben. Hat auch tadellos geklappt.
Sobald ich nun aber einen neuen Datensatz eingebe funktioniert keine Abfrage mehr. Egal ob über alle Tabellen oder nur über eine.

Fehlermeldung: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in....usw.
Es liegt ein leeres Ergebnis vor.

ID´s habe ich schon alle verglichen, stimmt und in jeder Tabelle sind gleich viele Zeilen.
Habe jetzt die Datenbank vom Server exportiert und bei mir lokal getestet, mit der identischen Eingabemaske, identischen Datenbankabfragen usw.
Siehe da, hier funktioniert es.

Der Mysql-Server bei Host Europe ist: 5.0.32-Debian_7etch1~bpo.1-log
Mein Mysql-Server über XAMPP ist: 5.0.51


Hat jemand zufällig mit so etwas Erfahrung oder Ähnliches schon erlebt?

Würde mich über einen Tipp dazu, woran es denn liegen könnte sehr freuen.

Die Syntax kann es meineserachtens nicht sein, tausendmal getestet und geht auch sonst alles.

Vielen Dank schon im Voraus,

mallmis

|Coding
12.02.2008, 20:43:32
Hi!

Schau doch mal was Dir mysql_error() sagt:

z.B.:
mysql_query ( 'Dein Query' ) or die ( mysql_error () );

mallmis
12.02.2008, 20:57:06
Hallo, hier die Fehlermeldung,

bekomme ich zum ersten mal.

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay


Danke schon mal

Socrates
12.02.2008, 22:13:18
Du würdest mit deiner Abfrage mehr Datensätze anfordern, als du anfordern darfst. (Würde ich ma so grob übersetzen) Das heißt, spezifiziere deine Anfrage oder erhöhe dein Responseniveau oder lösche Datensätze. Ich denke das erste und zweite in Kombi und dein Problem ist gelöst.
MfG, Andy

mallmis
12.02.2008, 22:55:19
Vielen Dank für die Hilfe,

Host Europe hat die Limits der Abfragen begrenzt.

Habe dies durch:
mysql_query("SET SQL_BIG_SELECTS=1");

direkt nach dem Datenbankzugriff gelöst.

Bis dann,

mallmis

meikel (†)
13.02.2008, 01:26:06
Host Europe hat die Limits der Abfragen begrenzt.
Jut, die wissen, was schlaucht.
Habe dies durch:
mysql_query("SET SQL_BIG_SELECTS=1");
direkt nach dem Datenbankzugriff gelöst.

Das löst aber Dein Problem nicht! Brauchst Du wirklich so viele Datensätze, daß der MySQL Server schon Schluckbeschwerden bekommt? Normalerweise selektiert man ja das, was man anzeigen möchte... Jo, mehr benötigt man nicht im RAM des MySQL Clients und im PHP Scriptspeicher.... <g>

mallmis
13.02.2008, 10:14:16
Hallo,

dann sollte ich also anstatt select * nur die Felder auswählen, welche bei der Abfrage relevant sind, wenn ich richtig verstanden habe.

Hier mal ein Teil des Codes mit der Abfrage:

SELECT SQL_CALC_FOUND_ROWS * FROM basisdaten INNER JOIN ausstattung ON basisdaten.id = ausstattung.id_basis
INNER JOIN bilder ON basisdaten.id = bilder.id_ausst
INNER JOIN alt ON basisdaten.id = alt.id_bilder
INNER JOIN preise ON basisdaten.id = preise.id_alt
WHERE name LIKE '$name' AND person_bis >= '$personen' AND ort LIKE '$ort' AND aktiv = 'ja'
ORDER BY preis_1 ASC LIMIT ".$offset.",".$proseite ;


Aktuell brauche ich nur etwa 10 Felder aus den Datenbanken.

Die setzte ich dann anstatt des * mit Kommata getrennt ein. Richtig?

Wenn sonst noch Vorschläge zur Verbesserung der Performance vorliegen, würde ich mich freuen, wenn diese gepostet würden.

Gruß

mallmis