Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择所有记录和其他记录_Php_Mysql - Fatal编程技术网

Php 选择所有记录和其他记录

Php 选择所有记录和其他记录,php,mysql,Php,Mysql,下面是一个简单的mysqli查询,用于从mysql数据库中选择特定记录: foreach ($getData as $data) { { $sql = "SELECT * FROM `myTable` WHERE `bookid` = '".$data['ID']."' "; $result = $db->query( $sql );

下面是一个简单的mysqli查询,用于从mysql数据库中选择特定记录:

foreach ($getData as $data) { {

    $sql = "SELECT * FROM `myTable` WHERE `bookid` = '".$data['ID']."' "; 
    $result = $db->query( $sql ); 
                                            
    while ($zeile = $result->fetch_object()) {  
        // DO SOMETHING                         
    }
                        
}
问题是: 如何获取(最佳实践)所有其他记录,而这些记录不会使用此查询筛选器进行选择?

它可以是

foreach ($getData as $data) { {

     $sql = "SELECT * FROM `myTable` WHERE `bookid` = '".$data['ID']."' "; 
     $result = $db->query( $sql ); 
                                        
      while ($zeile = $result->fetch_object()) {  
            // DO SOMETHING                  
       $query2 = "select * from 'myTable' WHERE 'bookid' != ".$zeile['ID']."'";
       $result2 = $db -> query($query2);
         // do something...       
    }
                    
 }   


在循环中运行连续的、或多或少相同的查询从根本上说是一种不好的方法。创建要使用的
$data['ID']
值列表,然后使用一个查询检索该列表中的所有行,使用第二个查询检索该列表以外的所有行:

重要提示:此代码假定可以信任
$getData[]['ID']
中的值。i、 e.他们在进入本代码之前已经过验证,或者他们来自可靠的来源

// 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                         
}

最佳实践
$sql=“SELECT*FROM
myTable`WHERE
bookid
>'19'`嗯,坏例子。值20并非每次都相同。这是一个动态值for循环有什么意义?为什么不在SQL中执行此操作?您最好使用
in
一次获取所有记录,然后对其余记录使用
not in
。很抱歉造成混淆。我更新了我的第一篇帖子。对于每个循环,循环都是实循环
// 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                         
}