here is a simple mysqli query to select specific records from my mysql database:
foreach ($getData as $data) { { $sql = "SELECT * FROM `myTable` WHERE `bookid` = '".$data['ID']."' "; $result = $db->query( $sql ); while ($zeile = $result->fetch_object()) { // DO SOMETHING } }
The question is: How can I get (best practices) all the other records, which will not be selected with this query filter?
Advertisement
Answer
Running successive, more or less identical, queries in a loop is fundamentally a bad way to do things. Create a list of $data['ID']
values you want to work with, then use one query to retrieve all the rows IN that list, and a second query to retrieve everything NOT IN that list:
Important: This code assumes that the values in $getData[]['ID']
can be trusted. i.e. they have been validated before entry to this code, or they come from a trusted source.
// Create a list: $inList = '('.implode(',', array_column($getData, 'ID')).')'; $sqlIn = "SELECT * FROM `myTable` WHERE `bookid` IN $inList"; // run the query. Check for errors if (($result = $db->query( $sqlIn )) === false) { throw new Exception($db->error); } while ($zeile = $result->fetch_object()) { // DO SOMETHING } // Now use the same list to exclude those rows $sqlOut = "SELECT * FROM `myTable` WHERE `bookid` NOT IN $inList"; // run the query. Check for errors if (($result = $db->query( $sqlOut )) === false) { throw new Exception($db->error); } while ($zeile = $result->fetch_object()) { // DO SOMETHING }