0

多対多の関係を持つ 3 つのテーブルからデータを取得したいと考えています。これが私のデータベースのテーブル構造です。

ユーザー

uid[pk] fname lname username
 1      John  smith johnsmith

アクティビティ

act_id[pk] title
 log       Account Login
 reg       Account Registration

ユーザーアクティビティ

serial_number[pk] act_id[fk] user_id[fk] ip_address date time
1                  reg           1       2.2.2.2      - 
2                  log           1       1.1.1.1      -                

私はフェッチしようとしています:

title  ip_address date time

これが私のmysqliクエリステートメントです:

SELECT a.title, ua.ip_address, ua.date, ua.time FROM users u 
LEFT JOIN user_activity ua ON ua.user_id = u.uid 
LEFT JOIN activity a ON a.activity_id = ua.act_id 
WHERE u.username=?"

データベースからデータをフェッチし、1 つではなく 3 つの結果を取得しています。

Title            Ip_address      Date                Time

Account Login    1.1.1.1         Mon,Nov4 2013       5:5pm
Account Login    1.1.1.1         Mon,Nov4 2013       5:5pm
Account Login    1.1.1.1         Mon,Nov4 2013       5:5pm

DISTICT を使用しましたが、機能しません。私が間違っている場合は修正してください。ありがとう

4

2 に答える 2

0

私があなたを正しく理解しているなら、あなたはただ追加する必要がありますGROUP BY

SELECT 
  title, ip_address
FROM
  users AS u
LEFT JOIN
  user_activity AS ua ON ua.user_id = u.uid
LEFT JOIN
  activity AS a ON a.activity_id = ua.act_id 
WHERE
  u.username = ?
GROUP BY
  ua.ip_address
于 2013-11-04T13:30:49.570 に答える
0

私は自分でそれを理解しました。今は正常に動作しています。これがクエリです。

SELECT a.title, ua.ip_address, ua.date, ua.time
FROM users AS u
LEFT JOIN user_activity AS ua ON ua.user_id = u.uid
LEFT JOIN activity AS a ON a.activity_id = ua.act_id
WHERE u.username = 'johnsmith'
GROUP BY ua.serial_number
于 2013-11-04T14:46:08.033 に答える