Seite 1 von 2
SQL-Fehler im PN-Archiv
Verfasst: 02.01.2003 16:50
von HeikoStr
Moin,
ich habe da ein Problem mit dem Archiv bei den Privaten Nachrichten...
Beim Aufruf des Archivs erhalte ich nur die Meldung:
Allgemeiner Fehler
Could not query private messages
Mit Such-Funktion habe ich hier nicht gefunden... Im englischen Forum nur diesen Hinweis:
http://www.phpbb.com/phpBB/viewtopic.php?t=58834
Nur bringt mich das jetzt nicht viel weiter... Ich finde nämlich diese SQL-Anweisung nicht in meinem Quelltext der privmsg.php...
In Zeile 217 wird zwar eine Variable $pm_sql_user definiert, die einen Teil der Anfrage enthält, aber die kann ich so nicht ändern, wie beschrieben...
Zusätzliche Informationen: Version 2.0.3
bisher keine Mods in privmsg.php
Forum auf:
http://www.fogelvrei.de/forum/
Schonmal vielen Dank für mögliche Hilfe, HeikoStr
Verfasst: 03.01.2003 00:53
von Mister_X
kannst du mal den link:DebugMode anmachen und die genauere Fehlermeldung nochmal posten.
Verfasst: 03.01.2003 07:36
von HeikoStr
Es wird mir zwar jetzt keiner glauben, aber seit gestern nachmittag gibt es den Fehler in meinem Forum nicht mehr...
Seit Weihnachten (Update von 1.4 auf 2.0.3) kam diese Meldung und jetzt ist sie plötzlich weg...
Ich habe meinen Provider schon angeschrieben, ob er was am SQL-Server geändert hat... Mal abwarten, was kommt...
Gruß, Heiko
PS: Sollte der Fehler wieder kommen, werde ich die Meldung vom Debug-Mode hier posten...
Verfasst: 14.01.2003 07:11
von HeikoStr
Moin,
jetzt ist der Fehler tatsächlich wieder aufgetaucht...
Hier nun die Fehlermeldung im DEBUG-Mode:
Allgemeiner Fehler
Could not query private messages
DEBUG MODE
SQL Error : 1104 The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok
SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username FROM privmsgs pm, users u WHERE ( ( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR ( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) ) ORDER BY pm.privmsgs_date DESC LIMIT 0, 50
Line : 1918
File : /opt/root/home/fogelvreide/public_html/forum/privmsg.php
Und die angesprochenen Zeilen...
Code: Alles auswählen
Zeilen 1913-1919
//
// Okay, let's build the correct folder
//
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query private messages', '', __LINE__, __FILE__, $sql);
}
Ich vermute, die SQL-Anfrage wird hier definiert:
Code: Alles auswählen
Zeilen 1742-1754
case 'savebox':
$sql_tot .= "WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )";
$sql .= "WHERE ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . "
AND u.user_id = pm.privmsgs_from_userid )
OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . "
AND u.user_id = pm.privmsgs_from_userid ) )";
break;
Gruß, Heiko
Verfasst: 23.01.2003 21:53
von HeikoStr
Noch ein paar Infos zum Server:
PHP Version 4.2.2
MySQL 3.23.39
Wenns noch hilft... Leider besteht das Problem immer noch...
Gruß, Heiko
PS: Forum liegt auf
www.fogelvrei.de/forum/
Verfasst: 24.01.2003 00:55
von PhilippK
Wie groß ist denn deine PN-Tabelle? Evtl. würde ich mal probieren, ob ein REPAIR TABLE (z.B. über phpMyAdmin) hilft.
Wenn's nicht klappt, könnte man versuchen, die Tabellen über ein JOIN zu verknüpfen.
Gruß, Philipp
Verfasst: 24.01.2003 12:44
von HeikoStr
Beide Tabellen hatten keinen Überhang...
Repair und Optimize trotzdem mal ausgeführt, aber Fehler kommt immer noch...
privmsgs: 972 Einträge und 87,0 KB
privmsgs_text: 1007 Einträge und 315,5 KB
Was meinst Du denn mit dem Join???
Verfasst: 25.01.2003 00:29
von PhilippK
HeikoStr,
versuch mal folgenden SQL-Befehl direkt mit phpMyAdmin auszuführen:
Code: Alles auswählen
SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM privmsgs pm, users u
WHERE (
( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR
( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) )
ORDER BY pm.privmsgs_date DESC
LIMIT 0, 50
anschließend den hier:
Code: Alles auswählen
SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM privmsgs pm
INNER JOIN users u ON u.user_id = pm.privmsgs_from_userid
WHERE (
( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 ) OR
( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 ) )
ORDER BY pm.privmsgs_date DESC
LIMIT 0, 50
Gruß, Philipp
Verfasst: 27.01.2003 10:52
von HeikoStr
PhilippK hat geschrieben:HeikoStr,
versuch mal folgenden SQL-Befehl direkt mit phpMyAdmin auszuführen:
Code: Alles auswählen
SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM privmsgs pm, users u
WHERE (
( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 AND u.user_id = pm.privmsgs_from_userid ) OR
( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 AND u.user_id = pm.privmsgs_from_userid ) )
ORDER BY pm.privmsgs_date DESC
LIMIT 0, 50
Er erste Befehl ergab folgende Meldung:
Code: Alles auswählen
MySQL meldet:
The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok
anschließend den hier:
Code: Alles auswählen
SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM privmsgs pm
INNER JOIN users u ON u.user_id = pm.privmsgs_from_userid
WHERE (
( pm.privmsgs_to_userid = 17 AND pm.privmsgs_type = 3 ) OR
( pm.privmsgs_from_userid = 17 AND pm.privmsgs_type = 4 ) )
ORDER BY pm.privmsgs_date DESC
LIMIT 0, 50
Und jetzt bringt er mir die 6 Nachrichten, die im Archiv sind...
Was muß ich denn nun im Quelltext ändern???
MfG, Heiko
Verfasst: 27.01.2003 18:04
von PhilippK
Ersetzte folgendes:
Zeile 1885f.:
Code: Alles auswählen
$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u ";
mit
Code: Alles auswählen
$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
FROM " . PRIVMSGS_TABLE . " pm INNER JOIN " . USERS_TABLE . " u ";
Zeile 1895ff.:
Code: Alles auswählen
$sql .= "WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND u.user_id = pm.privmsgs_from_userid
AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
mit
Code: Alles auswählen
$sql .= "ON u.user_id = pm.privmsgs_from_userid
WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
Zeile 1907ff.:
Code: Alles auswählen
$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND u.user_id = pm.privmsgs_to_userid
AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
mit
Code: Alles auswählen
$sql .= "ON u.user_id = pm.privmsgs_to_userid
WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
Zeile 1917ff.:
Code: Alles auswählen
$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND u.user_id = pm.privmsgs_to_userid
AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL;
mit
Code: Alles auswählen
$sql .= "ON u.user_id = pm.privmsgs_to_userid
WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL;
Zeile 1928ff.:
Code: Alles auswählen
$sql .= "WHERE u.user_id = pm.privmsgs_from_userid
AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )";
mit
Code: Alles auswählen
$sql .= "ON u.user_id = pm.privmsgs_from_userid
WHERE ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )";
Gruß, Philipp