2

データをプルする必要があるテーブルが4つあります。1つのイベントに署名した人の数を数え、ユーザーがイベントに応募したかどうかを確認する必要があります。

これらは私のテーブルのセットアップです:

TABLE: users
+----+----------+-------+--------+-------+
| id | username | level | class  | guild |
+----+----------+-------+--------+-------+
| 1  | example1 | 100   | Hunter | blah  |
| 2  | example2 | 105   | Mage   | blah2 |
| 3  | example3 | 102   | Healer | blah  |
+----+----------+-------+--------+-------+
ID is primary

TABLE: event_randoms
+----+----------+-------+--------+----------+----------+
| id | username | level | class  | apped_by | event_id |
+----+----------+-------+--------+----------+----------+
| 1  | random1  |  153  | Hunter |    3     |    3     |
| 2  | random2  |  158  | Healer |    3     |    1     |
| 3  | random3  |  167  | Warrior|    1     |    3     |
+----+----------+-------+--------+----------+----------+
ID is primary
apped_by should be foreign key to users.id
event_id should be foreign key to events.id

TABLE: events
+----+------------+------------+-----------+-----------+-----------+
| id | event_name | event_date | initiator | min_level | max_level |
+----+------------+------------+-----------+-----------+-----------+
| 1  |   event1   |    date1   |     1     |    100    |     120   |
| 2  |   event2   |    date2   |     1     |    121    |     135   |
| 3  |   event3   |    date3   |     1     |    100    |     120   |
| 4  |   event4   |    date4   |     1     |    150    |     200   |
+----+------------+------------+-----------+-----------+-----------+
ID is primary

TABLE: event_apps
+----+----------+--------------+
| id | event_id | applicant_id |
+----+----------+--------------+
| 1  |    3     |      2       |
| 2  |    4     |      2       |
| 3  |    3     |      1       |
| 4  |    1     |      3       |
+----+----------+--------------+
ID is primary
event_id should be foreign key to events.id
applicant_id should be foreign key to users.id

私はこれに非常に慣れていないことを最初に認めます。数日前にMySQLの使い方を学びました。1つのテーブルからデータを取得することはできますが、複数のテーブルから取得する方法がわかりません。

これは私が試したSQLクエリです

SELECT DD_events.id, event_id, applicant_id, guild, level, class, DD_users.id
      FROM DD_events, DD_event_apps, DD_users
      WHERE DD_event_apps.event_id = DD_events.id
      AND DD_event_apps.applicant_id = DD_users.id

配列をprint_rしようとしましたが、配列が空になりました。

したがって、これに関連するいくつかの質問があります。1:イベントにサインアップしている人(ユーザーとランダム)の数を数として数え、表示するにはどうすればよいですか?例:イベント3には合計4つ(2人のユーザーと2人のランダム)が必要です

2:特定の個人がイベントに署名しているかどうかを確認し、署名されているかどうかに基づいてテキストを表示するにはどうすればよいですか?例:ユーザー1はイベント3にサインアップしているため、「登録済み」になりますが、署名されていないユーザー2は、「未登録」と表示されます。

3:特定のイベントに署名した人の情報を2つのテーブルに表示したい。1つはユーザー用、もう1つはランダム用です。例:イベント3では、usersテーブルの下に2つのユーザー情報(username、guild、class、level)があり、ランダムテーブルの下に2つのランダムなユーザー情報(name、class、level、このユーザーを適用したユーザー)があります。

あなたが1つの部分に答えることができるとしても、どんなそしてすべての助けもありがたいです。

4

2 に答える 2

3

これがあなたの基本的なクエリになると思います:

SELECT
    event.id,
    app.applicant_id,
    usr.guild,
    usr.level,
    usr.class,
    usr.id AS Userid
FROM
    DD_events event
JOIN
    DD_event_apps app
    ON  (event.id = app.event_id)
LEFT JOIN
    DD_users usr
    ON  (app.user_id = usr.id)

次のように、これを変更して集約できます。

SELECT
    event.id,
    COUNT(app.applicant_id) AS ApplicantCount,
    COUNT(DISTINCT usr.guild) AS UniqueGuilds,
    COUNT(DISTINCT usr.level) AS UniqueLevels,
    COUNT(DISTINCT usr.class) AS UniqueClasses,
    COUNT(DISTINCT usr.id) AS UniqueUsers
FROM
    DD_events event
JOIN
    DD_event_apps app
    ON  (event.id = app.event_id)
LEFT JOIN
    DD_users usr
    ON  (app.user_id = usr.id)
GROUP BY
    event.id

私はあなたのためにそれらのスクリプトを書くことができますが、これはあなたが続けるための良い出発点を提供すると思います。探している結果を取得しようとすると、T-SQLはかなり単純であることがわかります。お役に立てれば!

于 2012-12-29T16:19:38.983 に答える
0
<?php $query = "SELECT count(*) AS numbuh FROM DD_event_apps WHERE event_id = {$row['id']}";
try
{
    // These two statements run the query against your database table.
    $stmt = $db->prepare($query);
    $stmt->execute();
}
catch(PDOException $ex)
{
    // Note: On a production website, you should not output $ex->getMessage().
    // It may provide an attacker with helpful information about your code. 
    die("Failed to run query: " . $ex->getMessage());
}
echo($query);
// Finally, we can retrieve all of the found rows into an array using fetchAll
$count = $stmt->fetchAll();
echo($count['numbuh']); ?>
于 2012-12-30T14:20:58.307 に答える