2017-06-15 1 views
0

最初のSQLを使用するのではなく、最初のSQLを使用するために私のコードで偶然必要なのは何ですか?
誰かが私を助けてくれますか?最初のSQLではなく、最初のSQLを使用するために私のコードで偶然必要なのは何ですか?

 //return supplies 
      SELECT * FROM suppliers WHERE id=$id 

     //return all suppliers itens 
    SELECT 
    suppliers.*, 
    third_party_services.name as servicename 
FROM 
    suppliers 
INNER JOIN 
    suppliers_services 
ON 
    suppliers.id = suppliers_services.supplier_id 
LEFT JOIN 
    third_party_services 
ON 
    suppliers_services.id = third_party_services.id 
WHERE 
    suppliers_services.supplier_id = $id 

私はこれの.php

if(!empty($_POST)){ 
    if (isset($_POST['id']) && $_POST['id'] > 0){ 
     $id=$_POST['id']; 
     GetSuppliersView(); 
    } 
} 
function GetSuppliersView() { 
    global $db; 
    global $id; 
    try{ 
     $query = $db->query("SELECT * FROM suppliers WHERE id=$id"); 
     $row=$query->fetch(PDO::FETCH_ASSOC); 
     $result['success'] = true; 
     $result['result'] = $row; 
     echo json_encode($result); 
    return true; 
    } catch (PDOException $pe) { 
     return false; 
    } 
} 

へのモーダル

AJAXポイントにすべてのデータを表示するために、AJAXを使用していますし、これはAjaxコード

$('.itemview').click(function (e) { 
    e.preventDefault(); 
    $("#viewname").empty(); 
    $("#viewsuppliersocialname").val(""); 
    $("#viewsupplierfantasyname").val(""); 
    $("#viewsuppliercnpj").val(""); 
    $("#viewsuppliercontact").val(""); 
    $("#viewsupplieraddress").val(""); 
    $("#viewsupplierphone1").val(""); 
    $("#viewsupplierphone2").val(""); 
    $("#viewsupplierphone3").val(""); 
    $("#viewsupplieremail1").val(""); 
    $("#viewsupplieremail2").val(""); 
    $("#viewpaymentmethods").val(""); 
    var uid = $(this).data('id'); 
    $.ajax({ 
     type: "POST", 
     url: "resources/controllers/get.php", 
     data: 'id='+uid, 
     dataType: "json", 
     success: function (data) { 
      if (data.success) { 
       $('#viewname').append(data.result.name); 
       $('#viewsuppliersocialname').val(data.result.social_name); 
       $('#viewsupplierfantasyname').val(data.result.fantasy_name); 
       $('#viewsuppliercnpj').val(data.result.cnpj); 
       $('#viewsuppliercontact').val(data.result.contact); 
       $('#viewsupplieraddress').val(data.result.address); 
       $('#viewsupplierphone1').val(data.result.phone1); 
       $('#viewsupplierphone2').val(data.result.phone2); 
       $('#viewsupplierphone3').val(data.result.phone3); 
       $('#viewsupplieremail1').val(data.result.email1); 
       $('#viewsupplieremail2').val(data.result.email2); 
       $("#viewpaymentmethods").val(data.result.paymenttype).change(); 
       $("#MethodView").modal('show'); 
      } else { 

      } 
     } 
    }); 
}); 

です誰かが私にこれをしてください助けることができますか?

+0

'JOIN'の問題点は何でしょうか? – Ravi

答えて

0
SELECT 
    suppliers.*, 
    third_party_services.name as servicename 
FROM 
    suppliers 
INNER JOIN 
    suppliers_services 
ON 
    suppliers.id = suppliers_services.supplier_id 
LEFT JOIN 
    third_party_services 
ON 
    suppliers_services.id = third_party_services.id 
WHERE 
    suppliers_services.supplier_id = $id 
0

あなたが複数行うことができますが加わり、それだけで、左から右に解決します

SELECT 
    suppliers.*, 
    suppliers_services.*, 
    third_party_services.* 
FROM 
    suppliers 
INNER JOIN 
    suppliers_services 
ON 
    suppliers.id = suppliers_services.supplier_id 
LEFT JOIN 
    third_party_services 
ON 
    suppliers_services.id = third_party_services.id 
WHERE 
    supplier.id = $id 
+0

いくつかのコーナーケースの振る舞いを見る: 左結合を行うため、$ idを持つ "third_party_services"が存在しない場合でも、明らかに行を生成したいとします。これはまだそのケースをカバーしています。 "supplier_id = $ id"のところで$ idが "suppliers_services"のどこかにヒットしなかった場合、あなたの古いクエリは行を生成せず、内部結合を行うためではありません(つまり、 "サプライヤサービス"に現れます。サプライヤが存在していても、それは行を生成しません)。 サプライヤーを選択 '*、 suppliers_services *、 third_party_services * サプライヤー から内は third_party_services ON suppliers_services登録しよう suppliers.id = suppliers_services.supplier_id 左側の suppliers_services のJOIN: –

+0

これはこれで動作します。。。 .id = third_party_services.id WHERE suppliers_services.supplier_id = 154'しかし、私は自分のコードを使ってどのように作業できますか? – Debs

+0

私はメインのポストを更新しました、どうすればそれを扱うことができますか?すべてのサプライヤの情報とすべてのサービスを表示する必要があります – Debs

関連する問題