2016-07-21 4 views
1

Ich habe eine Abfrage, die Hexe hat einen Satz drin. Wie kann ich diese Abfrage in php? das Ergebnis ist in phpmyadmin oder Werkbank, aber es gibt keine Antwort in php Code.Wie schreibe ich eine Abfrage in PHP mit gesetzt

set @num := 0, @ci := -1; 
select currency_id,buy,sell 
from 
    (select *, 
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number, 
    @ci := currency_id as dummy 
    from currency_price 
    order by `currency_id`, cu_date desc,buy,sell) x 
where gp_number=2 
order by currency_id 

, wenn ich will, es in den $conn->query er nichts tun.

ich versuche, viele Möglichkeiten, kann aber nicht

+0

es ist effektiv mehrere Abfragen – RamRaider

+0

Wenn Sie mit 'mysqli' können Sie die' multiquery' Methode zur Verfügung nutzen, wenn es PDO ist, dann können Sie die attributre auf der Verbindung 'PDO :: set ATTR_EMULATE_PREPARES' – RamRaider

Antwort

1

@RamRaider ist richtig. Sie haben hier zwei Fragen. Die erste ist die Zeile am oberen Rand Ihres Beispiels mit den set Operationen, und die zweite ist die Abfrage selbst.

phpmyadmin, wenn es eine Liste von Abfragen findet, führt sie höflich nacheinander aus. Aber die verschiedenen php MySQL APIs nicht. Sie müssen jede Abfrage mit einer separaten Verwendung von $conn->query() ausführen.

Oder Sie können dies umgestalten, um in nur einer Abfrage zu passen. In MySQL Dialekt dies:

SELECT @a := a+1 a, 
     @b := b-1 b, 
     col, col, col 
    FROM table 
    JOIN (SELECT @a := 1, @b := 1) init 

Solange das nicht über einen ON Zustand in ihm den Anfrageplaner JOIN:

SET @a :=1 ; 
SET @b := 1; 
SELECT @a := a+1 a, 
     @b := b-1 b, 
     col, col, col 
    FROM table 

kann durch den Beitritt zu einer Initialisierung „Tisch“, wie dieser Refactoring Läuft nur die Initialisierungsauswahl nur einmal.

+0

u kann mehr explane ? oder können Sie diese 2 Query zu einer Abfrage für mich complyly schreiben? –

+0

@SoheilAraei - Die erste ist die grundlegende Struktur Ihrer Abfrage und ist mehr als 1 Aussage. Die grundlegenden PHP MySQL-Query-Funktionen verarbeiten nur eine einzige Anweisung (die als sehr einfach und recht schlecht gegen SQL-Injection betrachtet werden könnte). Die zweite Anweisung verbindet sich mit einer Unterabfrage (die zuerst ausgeführt wird, wenn die Abfrage ausgeführt wird), und die Variablen werden in der Unterabfrage initialisiert. – Kickstart