CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
31.08.2010, 17:13:12
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: UPDATE verfälscht SELECT?
Hi,
schau dir mal oben nochmal den Code an. Jedes UPDATE betrifft nur genau einen Datensatz, allerdings wird genau das Value upgedatet, nach dem auch sortiert wird. Und genau is der Knackpunkt wo ich nicht weiß, ob vorher die Reihenfolge festgelegt wird und es eigtl. passen müsste oder ob es nachträglich hier zu Verschiebungen kommen kann.
Gruß
Domi
__________________
the best way to be ready for the future is to invent it
|
31.08.2010, 17:41:23
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: UPDATE verfälscht SELECT?
In Deinem obigen Beispiel bestrifft das Update eben nicht nur genau den einen Datensatz, da die WHERE-Klausel fehlt. Ist aber auch egal, ich glaub ich weiß jetzt was Du meinst.
In diesem Fall spielt die Sortierung (zumindest bei MySQL in einer aktuellen Version; ich weiß nicht wie's früher bei MySQL war oder wie es bei anderen DBMS aussieht) im Nachhinein (also nach der SELECT-Abfrage) gar keine Rolle mehr für das Update (und auch für alles andere nicht mehr).
Du solltest also keine Probleme bekommen.
Gruß, Dennis
|
31.08.2010, 17:47:46
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: UPDATE verfälscht SELECT?
Zitat:
Zitat von Der-Dennis
In Deinem obigen Beispiel bestrifft das Update eben nicht nur genau den einen Datensatz, da die WHERE-Klausel fehlt. Ist aber auch egal, ich glaub ich weiß jetzt was Du meinst.
|
Da hast du vollkommen Recht, wohl das Beispiel zu schnell erstellt ;) Habs hinzugefügt. Ja, bin auch der Meinung, dass es keine Rolle spielt, aber irgendwo her muss der Fehler kommen, das Datensätze doppelt behandelt werden. Eigtl bleibt nur das übrig, muss ich wohl irgendwas zu debugen bauen..
Danke trotzdem
Domi
__________________
the best way to be ready for the future is to invent it
|
01.09.2010, 10:44:27
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: UPDATE verfälscht SELECT?
Wie gesagt, ich mache in einem Cronjob was Ähnliches und das funktioniert ohne Probleme.
Dann viel Erfolg bei der Fehlersuche und halt mich bitte auf dem laufenden, was der Fehler war. Interessant wäre es ja schon zu wissen, wenn das unter bestimmten Umständen was mit Select und Update zu tun hätte.
Gruß, Dennis
|
01.09.2010, 11:46:35
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: UPDATE verfälscht SELECT?
Zitat:
Zitat von Domi
Hallo Zusammen,
hab nen PHP-Skript auf der Konsole laufen, welches auch gerne mal über Tage hinweg läuft, da es jede Menge Einträge gibt und er für jeden Eintrag ein Skript laufen lass muss, welches nochmals ca. 1 Sekunde dauert.
PHP-Code:
$sql = 'SELECT * FROM table ORDER BY value';
// ...
while ($row = mysql_fetch_assoc($result)) {
// ...
$sql = 'UPDATE table SET value = ' . $random . ' WHERE id = ' . $row['id'];
|
Für so etwas brauchst Du zwei Datenbankverbindungen, da der Update das ResultSet des Select ändert. Bitte probieren, ob folgende Idee etwas bringt:
PHP-Code:
// ...
$dbSelect = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$dbUpdate = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$sql = 'SELECT * FROM table ORDER BY value';
mysql_query($sql,$dbSelect);
// ...
while ($row = mysql_fetch_assoc($dbSelect)) {
// ...
$sql = 'UPDATE table SET value = ' . $random . ' WHERE id = ' . $row['id'];
mysql_query($sql,$dbUpdate);
Vielleicht eine Lösung....
Grüße
Thomas
|
01.09.2010, 11:51:30
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: UPDATE verfälscht SELECT?
Zitat:
Zitat von thomas_w
da der Update das ResultSet des Select ändert.
|
genau das versuche ich andauernd herauszufinden obs wirklich so ist oder nicht, hats ne Quelle dazu?
Domi
__________________
the best way to be ready for the future is to invent it
|
01.09.2010, 12:04:57
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: UPDATE verfälscht SELECT?
Eine Quelle habe ich dafür nicht parat, allerdings schon mit anderen Programmen und Datenbanken (nicht PHP, nicht MySQL) ausprobiert und benötigt.
Im Prinzip stellt die Datenbank nach dem "SELECT ..." eine temporäre Datenmenge auf dem DB-Server zur Verfügung, diese temporäre Datenmenge ist nicht unbedingt identisch mit der Tabelle. (Siehe auch Cursor Stability)
Auf diesen "Verbindungskanal" $dbSelect liest (fetch) das Programm Satz für Satz. Wenn jetzt auf diesem Verbindungskanal $dbSelect ein anderer SQL erfolgt, wird die temporäre Datenmenge "gestört/zerstört". Ich denke, da reagiert jede Datenbankengine etwas anderst.
Soweit mal meine Gedanken dazu...
Grüße
Thomas
|
01.09.2010, 12:45:40
|
Anfänger
|
|
Registriert seit: Jul 2010
Alter: 37
Beiträge: 29
|
|
AW: UPDATE verfälscht SELECT?
Folgende Tabelle:
Code:
id | wert
----------
1 | 5
----------
2 | 10
----------
3 | 15
----------
4 | 20
----------
und folgendes Test-Skript:
PHP-Code:
$sql = 'SELECT * FROM tabelle ORDER BY wert DESC';
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo 'ID ' . $row['id'] . ' vor Update: ' . $row['wert'] . '<br />';
$sql = 'UPDATE tabelle SET wert = wert - 10 WHERE id = ' . $row['id'];
$affected = mysql_query($sql);
echo $affected . ' Datensätze geändert' . '<br />';
echo 'ID ' . $row['id'] . ' nach Update: ' . $row['wert'] . '<br />';
}
liefert bei mir:
ID 4 vor Update: 20
1 Datensätze geändert
ID 4 nach Update: 10
ID 3 vor Update: 15
1 Datensätze geändert
ID 3 nach Update: 5
ID 2 vor Update: 10
1 Datensätze geändert
ID 2 nach Update: 0
ID 1 vor Update: 5
1 Datensätze geändert
ID 1 nach Update: -5
Gruß, Dennis
|
01.09.2010, 12:49:04
|
|
Senior Member
|
|
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
|
|
AW: UPDATE verfälscht SELECT?
Hi Dennis,
das würde ja richtig aussehen, die Frage ist nur, obs bei SELECTs die übere mehrere Tage hinweg laufen Probleme geben kann?
Was nutzt du für ne Engine? Hab hier InnoDB.
Zitat:
Zitat von thomas_w
Im Prinzip stellt die Datenbank nach dem "SELECT ..." eine temporäre Datenmenge auf dem DB-Server zur Verfügung, diese temporäre Datenmenge ist nicht unbedingt identisch mit der Tabelle. (Siehe auch Cursor Stability)
Auf diesen "Verbindungskanal" $dbSelect liest (fetch) das Programm Satz für Satz. Wenn jetzt auf diesem Verbindungskanal $dbSelect ein anderer SQL erfolgt, wird die temporäre Datenmenge "gestört/zerstört". Ich denke, da reagiert jede Datenbankengine etwas anderst.
|
klinngt allerings auch plausibel..
__________________
the best way to be ready for the future is to invent it
|
01.09.2010, 12:50:36
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: UPDATE verfälscht SELECT?
Zitat:
Zitat von thomas_w
Eine Quelle habe ich dafür nicht parat, allerdings schon mit anderen Programmen und Datenbanken (nicht PHP, nicht MySQL) ausprobiert und benötigt.
|
Kleine Korrektur, mit PHP (ODBC) und IBM DB2 hatte ich das Problem auch schon mal so gelöst.
Grüße
Thomas
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:53:54 Uhr.
|