2017-05-18 4 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に、あなたはそこに作成することができます。 codeigniterでクエリ結果を取得するための –

+1

:$ 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(); 

を試行し、CodeIgniterのの方法でこのクエリを実行したい場合はUはまた、このようにしてみてください。

 $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()); 

詳細については、あなたは2013以下はCodeIgniterの中のデータベースと連携するための基本的な構造であるため、私はCIで作業されてきた https://www.codeigniter.com/userguide3/database/query_builder.html

0

ここで確認することができます。サブクエリとUNIONはサポートされていないため、両方のデータベースでSELECTを実行してから$query = $this->db->query($query1." UNION ".$query2);を実行するか、unionを使用して独自の句を作成する必要があります。詳細情報については

$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

関連する問題