0

ユーザーが人のユーザー名または姓を入力できるフォームをセットアップしました。次に、入力内容に応じてユーザー名または姓を取得し、データベースにクエリを実行して、すべてのユーザー情報と、特定の領域へのアクセス権があるかどうかを表示します。入力したユーザーのすべての情報を照会して取得する必要がある 2 つのテーブルがあります。JOIN を使用すると仮定していますが、その方法がよくわかりません。現在、users テーブルからすべてのデータを取得するためのクエリがあり、2 番目のテーブルに追加するのに助けが必要です。2つのテーブルは次のようになります

ユーザー { uid ユーザー名 パスワード 名 姓 電子メール }

userAccess {uid評価開発学習モジュールプロジェクト}

私がこれまでに持っているSQLは

    SELECT *
FROM Users
WHERE username = '$username' OR lastname = '$lastname'
4

2 に答える 2

1

そうです、結合を使用する必要があります。このタイプの結合は、内部結合と呼ばれます。次のように達成できます。

SELECT * from Users, userAccess WHERE Users.uid = userAccess.uid AND Users.uid = #;

userAccess テーブルの主キーである id 列もあると思います。上記のクエリは、上記のステートメントが真であるすべての条件に対して、1 つのレコードで両方のテーブルからのデータを提供します。

MySQL を使用している場合は、こちらで結合について詳しく読むことができます。

http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-09-11T02:15:35.157 に答える
0

MySqlを推測していますが、使用しているデータベースについては言及していません。

あなたがする必要があるのは、単純な内部結合です:

SELECT u.uid 
    u.username, 
    u.password, 
    u.firstname, 
    u.lastname, 
    u.email, 
    ua.assessment, 
    ua.development, 
    ua.learningmodule, 
    ua.project
FROM Users u
INNER JOIN UserAccess ua
    ON u.uid = ua.uid
WHERE u.firstname LIKE '%$username%' OR u.lastname LIKE '%$lastname%';

UserAccess テーブルで uid を再度選択していないことに注意してください。これは、Users テーブルから既に選択しているため冗長であり、そのキーで参加しているため、再度必要ないためです。

また、等号演算子 (=) を使用する代わりに、LIKE 演算子を使用することに注意してください。これは、完全な単語ではなく、キーワードなどの部分的な情報に基づいて情報をフィルター処理する可能性が高いためです。

初心者向けの SQL チュートリアルをご覧になることをお勧めします。これはこれで十分のようです。

また、ここに質問を投稿する方法に関するガイドラインを読むことをお勧めします。

于 2013-09-11T02:23:37.287 に答える