2016-04-18 9 views
0

In meinem Code übergebe ich eine Zeichenfolge-Variable ('4,5,6') an meine gespeicherte Prozedur, die aus dieser Zeichenfolge (4,5,6-Name). Ich benutze IN-Klausel in gespeicherten Prozedur und ich weiß, dass IN-Klausel akzeptieren ('4', '5', '6') oder einfach (4,5,6) diese Art von Daten, aber ich kann es nicht in meinem verwenden gespeicherte Prozedur. Bitte hilf mir, wenn es einen anderen Weg gibt, es zu erreichen.Verwendung von Zeichenfolge in IN-Klausel in gespeicherten Prozedur mysql

CREATE DEFINER = 'root'@'localhost' 
PROCEDURE kbm.report_site_transfer(IN siteid VARCHAR(50), IN datefrom VARCHAR (15), IN dateto VARCHAR (15)) 

SELECT 
     * 
     FROM 
     tbl_transfer 
     WHERE 
     tbl_transfer.siteNameID IN (siteid) AND (tbl_transfer.paymentDate BETWEEN datefrom AND dateto); 
+0

Was ist der Wert von 'site_id' –

+0

@Uchiha eigentlich bin ich eine Zeichenfolge (4,5,6-anyname) explodiert und explodierte es mit "-" seperator und möchte ersten Wert in IN-Klausel (4,5,6) verwenden, aber wenn ich den Typ in PHP überprüft, zeigt es eine Zeichenfolge, so kann ich nicht in IN-Klausel in gespeicherten Prozedur verwenden – Paramjeet

+0

Siehe dazu Erstellen und Ausführen einer Abfragezeichenfolge dynamisch http://stackoverflow.com/questions/8549619/mysql-dynamical-build-query-string-in-a-stored-procedure-based-on-logic. Sie müssten die umgebenden einfachen Anführungszeichen in dem übergebenen Parameter hinzufügen. – PaulF

Antwort

0

Haben Sie versucht, so etwas wie dies, wie ich habe Ihnen den Link zu - Sie die gesamte Abfrage als String erstellen & dann als eine vorbereitete Anweisung ausführen:

CREATE DEFINER = 'root'@'localhost' 
PROCEDURE kbm.report_site_transfer(IN siteid VARCHAR(50), IN datefrom VARCHAR (15), IN dateto VARCHAR (15)) 

Set @query = CONCAT("SELECT * FROM tbl_transfer WHERE tbl_transfer.siteNameID IN (", siteid, ") AND (tbl_transfer.paymentDate BETWEEN ", datefrom, " AND ", dateto, ")"; 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Wenn Sie die einzelnen zitiert wollte Version, die Sie verwenden könnten:

Set @query = CONCAT("SELECT * FROM tbl_transfer WHERE tbl_transfer.siteNameID IN ('", REPLACE(siteid,",", "','"), "') AND (tbl_transfer.paymentDate BETWEEN ", datefrom, " AND ", dateto, ")"; 
+0

Dank PaulF, Abfrage läuft perfekt, aber ich habe auch einen Weg gefunden, es gibt auch die Ausgabe, wie ich wollte. aber vielen Dank für Ihre Bemühungen – Paramjeet

0

Dieser Code funktioniert auch gut. Ich benutzte FIND_IN_SET Funktion:

FIND_IN_SET(tbl_transfer.siteNameID, siteid) 

Voll Code:

CREATE DEFINER = 'root'@'localhost' 
PROCEDURE kbm.report_site_transfer(IN siteid VARCHAR(50), IN datefrom VARCHAR (15), IN dateto VARCHAR (15)) 

SELECT 
    * 
    FROM 
    tbl_transfer 
    WHERE 
FIND_IN_SET(tbl_transfer.siteNameID, siteid) AND (tbl_transfer.paymentDate BETWEEN datefrom AND dateto); 
Verwandte Themen