php
  • mysql
  • 2016-05-12 20 views 1 likes 
    1

    PHPで大規模なデータベースにクエリを実行していますが、私は十分に近くで実行していません。 私は必要なコードを持っている、私は簡単にこれらのステートメントをコンパクトに良い方法を見つけることができません。PHP/SQL、クエリ数を減らす

    $q = $_GET['q']; 
        (dbinit) 
        $query = "SELECT post_id FROM wp_postmeta WHERE meta_key = '_billing_email' AND meta_value = '$q'"; 
        $result = mysql_query($query); 
    
        while ($row = mysql_fetch_array($result)) 
    { 
    $thing = $row['post_id']; 
    $querys = "SELECT 'meta_value' FROM wp_postmeta WHERE post_id = '$thing' AND meta_key = '_order_number'"; 
    $results = mysql_query($querys); 
    $rows = mysql_fetch_array($results); 
    $postid = $rows['meta_value']; 
    $queryss = "SELECT post_id FROM $table WHERE meta_value = $postid AND meta_key = '_order_number'"; 
    $resultss = mysql_query($query); 
    $rowss = mysql_fetch_array($result); 
    $order_id = $rowss['post_id']; 
    (handling) 
    } 
    

    私は、これらのクエリを行うには、より効率的な方法がある場合は疑問に、あるいは多分1つのクエリでそれらを持っているのですか?

    +4

    結合を使用し、ドライバを更新し、パラメータ化されたクエリを使用します。 – chris85

    +0

    @ chris85非常に少ない単語ですごく偉大な - 私ができるなら、もう一度upvoteだろう。 – JimL

    +0

    **警告**: '$ _GET'データをクエリに直接入れて、危険な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成しました。 **決してこれをしないでください。代わりに、WordPress [prepared statements features](http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks)を使用して、すべてのデータパラメータを適切にエスケープします。 – tadman

    答えて

    0

    $tableの由来はわかりません。

    しかし、これJOIN試みは動作するはずです:

    $q = $_GET['q']; 
    // ... dbinit ... 
    
    $query = "SELECT wpp.post_id, 
         wpp1.meta_value as orderNumber, 
         wpp2.post_id as orderId 
    
        FROM wp_postmeta wpp 
        LEFT JOIN wp_postmeta wpp1 
        ON wpp1.post_id = wpp.post_id 
         AND wpp1.meta_key = '_order_number' 
        LEFT JOIN $table wpp2 
        ON wpp2.meta_value = wpp1.meta_value 
         AND wpp2.meta_key = '_order_number' 
        WHERE wpp.meta_key = '_billing_email' 
         AND meta_value = '$q'"; 
    
    $result = mysql_query($query); 
    while ($row = mysql_fetch_array($result)) { 
        (handling) 
    } 
    

    あなたが必要な場合は、ループ内

    $thing = $row['post_id']; 
    $order_id = $row['orderId']; 
    

    を得ることができます見ることができるように。

    +0

    先生、あなたは今私の神です。 – Bc1151

    +0

    @ Bc1151 SQLインジェクションを閉じることを忘れないでください。 – chris85

    関連する問題