1

検索しましたが、必要なものが見つかりませんでした。誰かが私を助けることができれば..ありがとう割り当て。

同じテーブルが 2 つありますが、テーブル名が異なり、行名が次のように異なります。

adminsという名前の最初のテーブル:

admin_pid、uname、admin_email、admin_fname、password、salt、admin_date_created、admin_date_create、admin_date_update、admin_type、ip、timestamp

他のテーブルには同じデータがありますが、行名は次のように異なります。

usersという 2 番目のテーブル:

userid 、 username 、useremail 、user_fname 、 password 、 salt 、admin_user_create、 user_date_created 、 user_date_update 、 userlevel 、 ip 、timestamp

どちらもユーザーの詳細を保持しますが、一方のテーブルは管理パネルに使用され、もう一方はフロント サイトに使用されます。

フロントサイトのログイン機能から私の正しい選択:

  if ($stmt = $mysqli->prepare("SELECT userid, username ,userlevel, ip, password, salt FROM users WHERE useremail = ? LIMIT 1")) { 
      $stmt->bind_param('s', $email); // Bind "$email" to parameter.
      $stmt->execute(); // Execute the prepared query.
      $stmt->store_result();
      $stmt->bind_result($user_id, $username,$usrlvl, $ip , $db_password, $salt); // get variables

フロントサイトで作業するユーザーと管理者の両方にしたい。

両方を選択して、ユーザーが存在するかどうかを両方のテーブルから確認できますか?

4

2 に答える 2

0

私が正しく理解しているなら、あなたは使いたいですUNION ALL

SELECT userid, username ,userlevel, ip, password, salt 
  FROM
(
    SELECT userid, username, userlevel, ip, password, salt, useremail
      FROM users 
     UNION ALL
    SELECT admin_pid, uname, admin_type, ip, password, salt, admin_email
      FROM admins
) q
 WHERE useremail = ? 

また

SELECT userid, username, userlevel, ip, password, salt
  FROM users 
 WHERE useremail = ? 
 UNION ALL
SELECT admin_pid, uname, admin_type, ip, password, salt
  FROM admins
 WHERE admin_email = ? 

注:SELECT多数の列を機能させるには、両方の s の位置順序とデータ型が同じである必要があります。userlevelテーブルに名前の列がないので、代わりadminsに即興で入れていました。admin_typeそうでない場合は、この列を削除するか、この列の 2 番目の選択から定数値を返す必要があります。

これがSQLFiddleのデモです

于 2013-09-03T04:53:55.277 に答える
-1

はい、次のような SQL UNION ステートメントを使用してそれを行うことができます。

SELECT userid, username ,userlevel, ip, password, salt FROM users 
UNION
SELECT userid, username ,userlevel, ip, password, salt FROM admins
WHERE users.useremail = ? OR admins.useremail = ? LIMIT 1;
于 2013-09-03T04:54:06.343 に答える