2016-04-15 19 views
0

2つのクエリを組み合わせています。私はdialogue_listから*を選択することができますが、dialogue_list。*では、employee_id = '$ rowemployees [employee_id]'をメインクエリの上に配置する方法がわかりませんでしたか?それはPHPとMySQLを組み合わせていますが、すべてが単なるMySQLになります。2つのMySQLクエリを組み合わせる方法

$sqlemployees = mysqli_query('select u.fname, u.lname, d_e.*, d_list.*, d_list.emplsub.sqlcal AS sqlcalcemp 
from 
(select count(*) AS sqlcal from dialogue_employees d_e, 
dialogue_leaders d_l 
    where 
    d_l.leader_group_id = d_e.leader_group_id and 
    d_l.cycle_id = $cycle_id) AS sub, 
dialogue_list d_list, user u, dialogue_employees d_e, 
dialogue_leaders d_l 
where employee_id=d_list.employee_id and 
u.userID = d_e.employee_id and 
d_l.leader_group_id = d_e.leader_group_id and 
d_l.cycle_id = $cycle_id') or die(mysql_error()); 

while($rowemployees=mysqli_fetch_array($sqlemployees)) 
{ 
    $sqli=mysqli_query("select * 
    from dialogue_list 
    where employee_id='$rowemployees[employee_id]' and cycle_id='$cycle_id'")or die(mysql_error()); 
} 
+0

** WARNING **:あなただけのPHPを学習している場合は、実行してください古い['mysql_query'](http://php.net/manual/en/function.mysql-query.php)インタフェースを学んではいけません。それはひどいので、PHP 7では削除されました。[PDOは学ぶのが難しくありません](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for database-access /)、[PHP The Right Way](http://www.phptherightway.com/)のようなガイドはベストプラクティスの説明に役立ちます。あなたのユーザーパラメータは、** [適切にエスケープされていません](http://bobby-tables.com/php)で、おそらく重大な[SQLインジェクションバグ](http://bobby-tables.com/)があります。 – tadman

+0

私は10歳のコードを編集して最新のものにしています。私はまずこれを行うことができます前に、クエリを組み合わせる必要があります。私はちょうどemployee_id =。 '$ rowemployees [employee_id]'を持つこのPHPの部分に困惑しました。そして、それをメインのSQLクエリに入れる方法 –

+0

かなりのプロジェクトのように聞こえます。ここでは 'mysqli'と' mysql_query'を混在させているようですので、修正するまではこれはまったくうまくいかないでしょう。 mysqliが適切に設定されていれば、パラメータ化されたクエリと['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用して、エスケープする問題のほとんどを修正することができます。 – tadman

答えて

0

あなたは、私が見つけたJOINをLEFTを行うと、私はcycle_id年代を結合しなければならないところがある(テーブルがどのように相互作用するか見なければならない。選択* Dialogue_listは、*。d_listのであるし、それを見ていました何がEMPLOYEE_IDのために組み合わせる。

select u.fname, u.lname, d_e.*, d_list.*, subb.sqlcal AS sqlcalemp 
from (select count(*) as sqlcal from dialogue_employees d_e, 
    dialogue_leaders d_l 
where 
    d_l.leader_group_id = d_e.leader_group_id and 
    d_l.cycle_id = $cycle_id) as subb, 
user u, dialogue_employees d_e 
LEFT JOIN dialogue_list d_list ON d_e.employee_id = d_list.employee_id, 
    dialogue_leaders d_l where 
    u.userID = d_e.employee_id and 
    d_l.leader_group_id = d_e.leader_group_id and 
    d_l.cycle_id = $cycle_id and d_list.cycle_id = $cycle_id 
0

explicit joinsを使用して次のSQLクエリを考えてみましょう。また、あなたの派生カウント集計派生テーブル、subbemployee_idによってグループに必要な場合があります。また、/キャッチ、パラメータ化mysqliのクエリを試してみてください見ますPHPで処理することができます。

SQL(埋め込ま以下で$ cycle_idパラメータ化)

SELECT u.fname, u.lname, d_e.*, d_list.*, subb.sqlcal AS sqlcalemp 
FROM 

    (SELECT d_e.employee_id, count(*) as sqlcal 
    FROM dialogue_employees d_e 
    INNER JOIN dialogue_leaders d_l 
      ON d_l.leader_group_id = d_e.leader_group_id 
    WHERE d_l.cycle_id = $cycle_id 
    GROUP BY d_e.employee_id) as subb 

INNER JOIN user u 
     ON subb.employee_id = u.userID 
INNER JOIN dialogue_employees d_e 
     ON u.userID = d_e.employee_id 
INNER JOIN dialogue_leaders d_l 
     ON d_l.leader_group_id = d_e.leader_group_id 
LEFT JOIN dialogue_list d_list 
     ON d_e.employee_id = d_list.employee_id 

WHERE d_l.cycle_id = $cycle_id 
AND d_list.cycle_id = $cycle_id 

PHP

$cycle_id = ...; 

try { 
    // DATABASE CONNECTION 
    $conn = new mysqli($servername, $username, $password, $dbname);   

    // DEFINE SQL STRING 
    $sql = "SELECT u.fname, u.lname, d_e.*, d_list.*, subb.sqlcal AS sqlcalemp 
      FROM    
       (SELECT d_e.employee_id, count(*) as sqlcal 
       FROM dialogue_employees d_e 
       INNER JOIN dialogue_leaders d_l 
         ON d_l.leader_group_id = d_e.leader_group_id 
       WHERE d_l.cycle_id = ? 
       GROUP BY d_e.employee_id) as subb    
      INNER JOIN user u 
        ON subb.employee_id = u.userID 
      INNER JOIN dialogue_employees d_e 
        ON u.userID = d_e.employee_id 
      INNER JOIN dialogue_leaders d_l 
        ON d_l.leader_group_id = d_e.leader_group_id 
      LEFT JOIN dialogue_list d_list 
        ON d_e.employee_id = d_list.employee_id     
      WHERE d_l.cycle_id = ? 
      AND d_list.cycle_id = ?"; 

    // PREPARE AND BIND SQL STATEMENT 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("iii", $cycle_id, $cycle_id, $cycle_id); 

    // EXECUTE STATEMENT 
    $result = $stmt->execute(); 

} 
catch(mysqli_sql_exception $e) { 
    echo $e->getMessage()."\n"; 
}  

# CLOSE CONNECTION AND DATABASE 
$stmt->close(); 
$conn->close(); 

$conn = null; 
関連する問題