0

私はMySQLiと準備されたステートメントにかなり慣れていません。最近、多くのチュートリアルに従って、それらがどのように機能するかを理解していますが、それでもこのことを理解することはできません. 新しいユーザーが登録しようとすると、ユーザー名と電子メールがデータベースに既に存在するかどうかを確認したいと思います。次のコードは、1 つのテーブルをチェックすると機能しますが、複数のテーブルで既存のエントリをチェックしようとすると機能しません。Join と Cross Join 句、union と union all を試してみました。Dreamweaver では構文エラーは表示されませんが、どこかにコードの問題があるはずです。テーブルに参加する前にphpmyadminでテーブル間の関係を設定する必要があるかどうか疑問に思っていましたが、これが問題を引き起こすとは思いません。

// check if the email is taken
    $check = $mysqli->prepare("SELECT email FROM parents JOIN leaders WHERE parents.email = ? OR leaders.email = ?"); 
    $check->bind_param("s", $input['email']);
    $check->execute();
    $check->store_result();  
4

1 に答える 1

0

同じ構造のテーブルが 3 つあるとするとUNION、これらのテーブルを 1 つのクエリにまとめて、WHERE句に 1 つの条件を含める必要があります。

// UNION query to combine all three tables.
// The union is wrapped in a subquery to apply the single WHERE clause
// to the whole thing...
$sql = "
  SELECT email FROM (
    SELECT email FROM parents
    UNION SELECT email FROM leaders
    UNION SELECT email FROM guides
  ) combined
  WHERE email = ?";

if ($check = mysqli->prepare($sql)) {
  // Bind one input param
  $check->bind_param("s", $input['email']);
  $check->execute();
  $check->store_result();
  // Then fetch your row however you had planned to do so...
}

テーブル構造に関する注意:

一般に、同じ構造を持つ複数のテーブルを持つことはお勧めしません。ここでは 3 つの異なるテーブルの代わりに、それらすべてを組み合わせた 1 つのテーブルが必要であり、型を として識別する列がありますleader,guide,parent

于 2012-12-21T02:53:18.883 に答える