2017-05-18 21 views
2

我想從使用Codeigniter的數據庫獲取數據作爲框架。如何將MySQL查詢轉換爲PHP代碼

我能夠想出想要的結果的SQL查詢,但由於我不熟悉Codeigniter DB語法,因此遇到了麻煩。以下是我想要執行的查詢。我如何在PHP中執行此操作?

任何意見或建議,將不勝感激。謝謝。

SELECT A.*, B.* 
FROM 
    (SELECT A.* 
    FROM DriversInfo as A, InvoiceQueue as B 
    WHERE A.CreateTime = B.DriverCreateTime 
    AND B.Error <> 1 
    GROUP BY A.CreateTime 
    UNION 
    SELECT DISTINCT A.* 
    FROM DriversInfo as A, OrderInfo as B 
    WHERE A.CreateTime = B.DriverKey 
    AND B.Invoice <> '0') as A 
LEFT JOIN DriversDoc as B 
on A.CreateTime = B.DriverCreateTime 
WHERE B.DriversLicense is null 
OR B.CarRegistration is null 
OR B.BizCertificate is null 
OR B.Insurance is null; 
+0

如果在phpMyAdmin,那麼您可以創建那裏。 –

+1

用於獲取codeigniter中的查詢結果:$ query = $ this-> db-> query(「YOUR QUERY」) - > result_array(); – Nidhi

回答

5

試試這個:

$query=$this->db->query("SELECT A.*, B.* FROM (SELECT A.* FROM DriversInfo as A, InvoiceQueue as B WHERE A.CreateTime = B.DriverCreateTime AND B.Error <> 1 GROUP BY A.CreateTime UNION SELECT DISTINCT A.* FROM DriversInfo as A, OrderInfo as B WHERE A.CreateTime = B.DriverKey AND B.Invoice <> '0') as A LEFT JOIN DriversDoc as B on A.CreateTime = B.DriverCreateTime WHERE B.DriversLicense is null OR B.CarRegistration is null OR B.BizCertificate is null OR B.Insurance is null;"); 
1
$qry = "SELECT A.*, B.* 
    FROM 
    (SELECT A.* 
    FROM DriversInfo as A, InvoiceQueue as B 
    WHERE A.CreateTime = B.DriverCreateTime 
    AND B.Error <> 1 
    GROUP BY A.CreateTime 
    UNION 
    SELECT DISTINCT A.* 
    FROM DriversInfo as A, OrderInfo as B 
    WHERE A.CreateTime = B.DriverKey 
    AND B.Invoice <> '0') as A 
    LEFT JOIN DriversDoc as B 
    on A.CreateTime = B.DriverCreateTime 
    WHERE B.DriversLicense is null 
    OR B.CarRegistration is null 
    OR B.BizCertificate is null 
    OR B.Insurance is null;"; 

$query = $this->db->query($qry); 

$result = $query->result_array(); 
1
<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT A.*, B.* 
FROM 
    (SELECT A.* 
    FROM DriversInfo as A, InvoiceQueue as B 
    WHERE A.CreateTime = B.DriverCreateTime 
    AND B.Error <> 1 
    GROUP BY A.CreateTime 
    UNION 
    SELECT DISTINCT A.* 
    FROM DriversInfo as A, OrderInfo as B 
    WHERE A.CreateTime = B.DriverKey 
    AND B.Invoice <> '0') as A 
LEFT JOIN DriversDoc as B 
on A.CreateTime = B.DriverCreateTime 
WHERE B.DriversLicense is null 
OR B.CarRegistration is null 
OR B.BizCertificate is null 
OR B.Insurance is null"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     //displaying row 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
+0

請爲您的代碼添加一些解釋。 – MrLeeh

1

你必須只使用mysqli_query()功能與連接變量。

<?php 

    $sql = "YOUR QUERY"; 
    $result = mysqli_query($conn, $sql); 

    if (mysqli_num_rows($result) > 0) { 
     // output data of each row 
     while($row = mysqli_fetch_assoc($result)) { 
      //Access like $row["id"] 
     } 
    } else { 
     echo "0 results"; 
    } 

    mysqli_close($conn); 
    ?> 
1

如果u要運行在笨方法此查詢,那就試試這個

$this->db->select('A.*, B.*') 
$this->db->from('(SELECT A.* 
    FROM DriversInfo as A, InvoiceQueue as B 
    WHERE A.CreateTime = B.DriverCreateTime 
    AND B.Error <> 1 
    GROUP BY A.CreateTime 
    UNION 
    SELECT DISTINCT A.* 
    FROM DriversInfo as A, OrderInfo as B WHERE A.CreateTime = B.DriverKey AND B.Invoice <> '0') as A') 

$this->db->join('DriversDoc', 'A.CreateTime = B.DriverCreateTime ', 'left'); 
$this->db->where('B.DriversLicense', null); 
$this->db->or_where('B.CarRegistration', null); 
$this->db->or_where('B.BizCertificate', null); 
$this->db->or_where('B.Insurance', null); 
$this->db->get(); 

ü也可以嘗試這樣的。

 $query = $this->db->query('SELECT A.*, B.* 
FROM 
    (SELECT A.* 
    FROM DriversInfo as A, InvoiceQueue as B 
    WHERE A.CreateTime = B.DriverCreateTime 
    AND B.Error <> 1 
    GROUP BY A.CreateTime 
    UNION 
    SELECT DISTINCT A.* 
    FROM DriversInfo as A, OrderInfo as B 
    WHERE A.CreateTime = B.DriverKey 
    AND B.Invoice <> '0') as A 
LEFT JOIN DriversDoc as B 
on A.CreateTime = B.DriverCreateTime 
WHERE B.DriversLicense is null 
OR B.CarRegistration is null 
OR B.BizCertificate is null 
OR B.Insurance is null;'); 
     echo print_r($query->result()); 

欲瞭解更多信息,您可以點擊這裏 https://www.codeigniter.com/userguide3/database/query_builder.html

0

我正在與CI工作自2013年下面是基本的結構與笨數據庫工作。子查詢和UNION不受支持,所以您需要在兩個數據庫中執行SELECT,然後執行$query = $this->db->query($query1." UNION ".$query2);或使用聯合編寫自己的子句。

$this->db->select('*'); 
$this->db->from('table1'); 
$this->db->join('table2', 'table2.id = table1.id'); //same as JOIN table2 ON table2.id = table1.id 
$this->db->join('table2', 'table2.id = table1.id', 'left'); //produces a LEFT JOIN table2 ON table2.id = table1.id 
$this->db->where('column1', 'data'); //same as WHERE column1 = 'data' 
$this->db->where("colum1 = 'data' OR column2 = 'data2'"); // you can write you own clause 
$this->db->like('title', 'match'); //same as WHERE title LIKE '%match%' 
$this->db->like('title', 'match', 'before'); //same as WHERE title LIKE '%match' 
$this->db->like('title', 'match', 'after'); //same as WHERE title LIKE 'match%' 
$this->db->like('title', 'match', 'both'); //same as WHERE title LIKE '%match%' 
$this->db->group_by("title"); 
$this->db->order_by('title', 'ASC'); 


$query = $this->db->get(); 

欲瞭解更多信息:https://www.codeigniter.com/userguide3/database/query_builder.html