2009-04-08 20 views
0

Ich versuche, ein Feld in Mysql zu erhöhen, aber es scheint, dass es nicht wirklich aus irgendwelchen Gründen funktioniert ...Inkrementieren in MySQL

, dass die Abfrage ich in mysql Abfrage ausgeführt wird:

UPDATE profil_perso 
SET profile_views = profile_views +1 
WHERE id = 30537 

In der Statuszeile heißt es: 1 Zeile vom letzten Befehl betroffen. Kein Ergebnissatz zurückgegeben. Aber es schien nicht zu funktionieren. Zuerst dachte ich, dass es einfach weil es keine Reihen gab. Also lief ich diese Anfrage:

SELECT * 
FROM profil_perso 
WHERE id = 30537 

Und fand 1 Zeile und der profile_views Feld ist immer noch bei 0 ...

Irgendwelche Ideen, warum dies so sein würde?

[Bearbeiten] profile_views = 1 (manuell) in diesem Moment und es funktioniert immer noch nicht.

+0

Sie wählen in der gleichen Transaktion? – vartec

+0

Also was war der Fall? ;) – Quassnoi

Antwort

3

Haben Sie nicht vergessen, eine Transaktion zu begehen, wenn Sie mit einer Tabelle InnoDB arbeiten?

UPDATE:

Da es ein MyISAM ist, werde ich fragen, noch ein paar dumme Fragen:

  1. Sind Sie absolut sicher, dass Sie UPDATE und SELECT gegen eine Datenbank sind die Ausstellung?

    Ich hatte einmal eine große Farm von Datenbanken mit identischen Schemata, und das war ein Problem, wenn jemand etwas aus der falschen Datenbank löschte.

    • Verwenden Sie nicht eine Art Client-Caching auf Ihrem Client? Welchen Kunden benutzen Sie?

Und versuchen zu REPAIR Tisch, kann dies auch das Problem sein.

+0

es ist ein MyISAM :-) – Erick

+0

Man ... wie faulig ich bin ... es funktioniert völlig ok jetzt. Ich wählte aus der _dev db anstelle der _production db. Lol! Es ist seltsam, die _production db war beide Male fett. Jetzt total arbeiten. – Erick

+0

Willkommen im Club :) – Quassnoi

2

Nur um zu überprüfen - ist profile_views null oder null? Wenn Sie 1 zu null hinzufügen, erhalten Sie immer noch null, also könnte das Ihr Problem sein.

ETA:

So ist es nicht null. Die nächste Frage wäre, hast du Autocommit oder, wenn nicht, hast du ein "Commit" ausgegeben? Möglicherweise wurde es aktualisiert, aber Ihr Update wurde nie ausgeführt.

+0

Es ist bei Null. Ich dachte zuerst, dass es das wäre und setze es auf 1. Bleibt immer noch bei 1 nach dem Update. – Erick

+0

Die Tabelle ist MyISAM, also soll es nicht beeinflussen, nicht wahr? – Erick

0

einige Pars hinzufügen und einen coalesce zu sehen, ob es das behebt:

UPDATE profil_perso 
SET profile_views = (COALESCE(profile_views,0) + 1) 
WHERE id = 30537 
+0

Versucht und es bleibt 1. – Erick

1

Wenn es null ist, wird erhöht nicht.

UPDATE profil_perso 
SET profile_views = IF(profile_views,profile_views+1,1) 
WHERE id = 30537 
+0

Sie (Ich) lernen jeden Tag etwas Neues! –