1

私は3つのことのクエリを書こうとしています.私のテーブル構造はそのようなものです

http://sqlfiddle.com/#!2/56c2d/1でスキーマを確認できます。

MYSQL でクエリを作成しようとしています

user:-  table
    user_id
    user_fname

ユーザー情報を保存するユーザータブケです

group:- "group" and "subgroup" is maintain in same table using column "group_parent_group_id"
    group_id
    group_title
    group_parent_group_id(INT)

これは、グループとサブグループを保存するグループ テーブルです。

user_group: table
    user_group_id
    user_group_user_id
    user_group_group_id

これは、IDを使用してユーザーとグループの両方の関係を保存します

3 つのことについてクエリを作成しようとしています。ユーザーグループ、サブグループの取得

1) ユーザー登録のすべてのグループのリストを取得するクエリ。クエリは非常に低く、エラーが発生しています

クエリ:

select user.id, user.user_fname, group.group_id, group.group_title 
from `user` 
inner join user_group on user_group.user_group_user_id =  user.user_id 
inner join group on group.group_id = user_group.user_group_group_id   
where user_group.user_group_user_id = 1 and user_group.group_parent_group_id = 0 

2) グループ ID 1、2、または 1 のすべてのサブグループ (ユーザーが既に登録されている場合) を取得するためのクエリを探しています。

3) グループ ID 1、2、または 1 のすべてのサブグループ (ユーザーがまだ登録されていないユーザー) を取得するためのクエリを探しています。追加するサブグループをランダムに提案するのが理想的です。

助けてください。私はDBの初心者です:(

4

1 に答える 1

1

予約語である group というテーブルがあるため、クエリはおそらく失敗しています。バックティックを使用して名前を区切ることができますが (次のように)、これを回避できますが、テーブル名を変更することをお勧めします。

SELECT user.id, user.user_fname, `group`.group_id, `group`.group_title 
FROM `user` 
INNER JOIN user_group ON user_group.user_group_user_id =  user.user_id 
INNER JOIN `group` ON `group`.group_id = user_group.user_group_group_id   
WHERE user_group.user_group_user_id = 1 
AND user_group.group_parent_group_id = 0

OPに必要だと思われるクエリ用にEDITを更新しました。

最初のクエリは、ユーザー (この場合は ID 28) がメンバーであるすべてのグループ (親グループ ID を持たないグループ) のリストを取得します。

SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title 
FROM y2m_user 
INNER JOIN y2m_user_group ON y2m_user_group.user_group_user_id =  y2m_user.user_id 
INNER JOIN y2m_group ON y2m_group.group_id = y2m_user_group.user_group_group_id   
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id = 0

このクエリは、ユーザー (この場合は ID 28) がメンバーであるすべてのサブ グループ (親グループ ID が 0 より大きいグループ) のリストを取得します。

SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title 
FROM y2m_user 
INNER JOIN y2m_user_group ON y2m_user_group.user_group_user_id =  y2m_user.user_id 
INNER JOIN y2m_group ON y2m_group.group_id = y2m_user_group.user_group_group_id   
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id > 0

このクエリは、ユーザー (この場合は ID 28) がメンバーではないすべてのサブ グループ (親グループ ID が 0 より大きいグループ) のリストを取得します。

SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title 
FROM y2m_user 
CROSS JOIN y2m_group
LEFT OUTER JOIN y2m_user_group ON y2m_user_group.user_group_user_id =  y2m_user.user_id  AND y2m_group.group_id = y2m_user_group.user_group_group_id  
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id > 0
AND y2m_user_group.user_group_id IS NULL

テストされていないため、タイプミスを許してください(テストデータにはサブグループはありません)。

于 2013-06-04T09:34:58.223 に答える