2016-12-22 2 views
1

Ist es möglich, eine MySQL-Spalte zu erhöhen und die Ergebnisse in einer einzigen Abfrage zu erhalten? Wenn ja, wie und ist es effizienter als in zwei Abfragen? Beachten Sie, dass versionnicht eine Auto-Inkrement-Spalte ist.MySQL-Spalte erhöhen und Ergebnisse erhalten

$stmt=$this->pdo->prepare('UPDATE source_clients SET version=version+1 WHERE guid=?'); 
    $stmt->execute([$guid]); 
    $stmt=$this->pdo->prepare('SELECT version FROM source_clients WHERE guid=?'); 
    $stmt->execute([$guid]); 
    $version=$stmt->fetchColumn(); 
+0

Nein, nicht möglich, Sie müssen zwei Abfragen haben –

+0

Es gibt keine Möglichkeit, es in einer Abfrage zu tun. Die Art und Weise, wie Sie es tun, ist am effizientesten. – DaveyBoy

+0

Danke Raymond und DaveyBoy. Wusste nicht, ob eine Unterabfrage dies tun könnte. – user1032531

Antwort

0

Holen Sie sich einfach einen guten Wrapper. Dadurch wird der duplizierte Code gemindert, sodass Ihr Code effektiv so aussieht, als wären es nur zwei Abfragen in einem einzigen Aufruf.

$this->pdo->run('UPDATE source_clients SET version=version+1 WHERE guid=?',[$guid]); 
$version=$this->pdo->run('SELECT version FROM source_clients WHERE guid=?',[$guid]) 
     ->fetchColumn(); 

Die oben beschriebene Methode ist von meinem simple PDO wrapper

Aber in der Tat könnte man diese beiden Abfragen in einem einzigen Aufruf mit PDO laufen.

Wenn Sie den Emulationsmodus einschalten, ist dies durchaus möglich. Aber es wird Ihren Code nicht kürzer machen:

Ich bezweifle, dass dieser Ansatz die Mühe wert ist.
Weitere Informationen finden Sie im entsprechenden Teil meiner PDO tutorial

+0

Danke YourCommonSense. Off topic, aber verwenden Sie normalerweise einen solchen Wrapper für alle/die meisten Ihrer Abfragen? – user1032531

+0

Ja natürlich. Es gibt keine Nachteile und ich hasse es, den wiederholten Code zu schreiben - also benutze ich diesen Wrapper den ganzen Weg, wenn ich mit Roh-PDO arbeiten muss. Übrigens, ich habe ein Beispiel für die wörtliche Antwort auf Ihre Frage hinzugefügt :) –

Verwandte Themen