Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

SQL select all rows where col1 is equal to one of the values in a comma separated string

Select multiple rows matching values from a coma separated string.

example 1: A0001,A0002
example 2: A0001,A0003,A0005,A0006
example 3: A0007,A0008,A0009,A0010,A0011,A0012.


Table: Data
col1    col2    col3
--------------------
A0001   A   B
A0002   C   D
A0003   E   F
A0004   G   H
A0005   I   J
A0006   K   L
A0007   M   N
A0008   O   P
A0009   Q   R
A0010   S   T
A0011   U   V
A0012   W   X
A0013   Y   Z

Using OR

$sqlData = $this->con->prepare("SELECT col1, col2, col3 
                                FROM data 
                                WHERE col1=A0001 or col2=A0001");
$sqlData->execute();

I cannot use OR because the number of values in the coma separated string varies.

Using array

$comaSeperatedString = "A0007,A0008,A0009,A0010,A0011,A0012";
col1_arr = explode(",", $comaSeperatedString);

foreach (col1_arr as dataItem) {
    $sqlData = $this->con->prepare("SELECT col1, col2, col3 
                                    FROM data 
                                    WHERE col1=dataItem");
    $sqlData->execute();
    echo col1;
    echo col2;
    echo col3;
}

I could push the coma separated string into an array then use a foreach loop to iterate through the array running the query for each instance. However this seems sloppy and wasteful.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I want to select all rows where col1 is equal to one of the values in a comma separated string.

Can this be done in one simple SQL statement?

>Solution :

You can use FIND_IN_SET() which returns the item’s position in the comma separated list or 0 if not found:

$comaSeperatedString = "A0007,A0008,A0009,A0010,A0011,A0012";

$query = $this->con->prepare('SELECT col1, col2, col3 FROM data WHERE FIND_IN_SET(col1, :values)');
$query->bindParam(':values', $comaSeperatedString);
$query->execute();
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading