0

これは簡単かもしれませんが、mysql の経験が十分ではありません。4 つのテーブルがあります。

  • 従業員
  • ユーザー
  • 特権
  • ページ

これらの 4 つのテーブルから次のものを選択します。

  • emoloyeeName
  • ユーザーID
  • カウント(特権)
  • カウント(ページ)

したがって、クエリに各従業員のユーザー名、付与されたユーザー権限の数、およびユーザーによって作成されたページの数を表示したいのですが、テーブル構造は次のようになります。

CREATE TABLE IF NOT EXISTS `employee` (
  `ID` int(11) NOT NULL,
  `EMP_ENG_NAME_P1` varchar(15) DEFAULT NULL,
  `EMP_ENG_NAME_P2` varchar(15) DEFAULT NULL,) 
ALTER TABLE `employee`ADD PRIMARY KEY (`ID`);

CREATE TABLE IF NOT EXISTS `users` (
  `ID` int(11) NOT NULL,
  `USER_ID` varchar(30) DEFAULT NULL,
  `USER_EMP` int(11) DEFAULT NULL,) 
ALTER TABLE `users`ADD PRIMARY KEY (`ID`), 
  ADD UNIQUE KEY `USER_ID` (`USER_ID`), 
  ADD KEY `users_ibfk_1` (`USER_EMP`);

CREATE TABLE IF NOT EXISTS `privileg` (
  `ID` int(11) NOT NULL,
  `USER_ID` int(11) DEFAULT NULL,
  `PAGE_ID` int(11) DEFAULT NULL,)
ALTER TABLE `privileg`ADD PRIMARY KEY (`ID`);
ALTER TABLE `privileg` ADD CONSTRAINT `privileg_ibfk_2` 
  FOREIGN KEY (`USER_ID`) REFERENCES `users` (`ID`) 
  ON DELETE CASCADE ON UPDATE CASCADE;

CREATE TABLE IF NOT EXISTS `pages` (
  `ID` int(11) NOT NULL,
  `userCreatorID` int(11) DEFAULT NULL,
  `PAGE_ENG_DESC` varchar(100) DEFAULT NULL,)

各ユーザーの特権カウントで 1 回、各ユーザーの最初のクエリのページ数で 1 回に分けて、同じ結果を表示する 2 つのクエリを作成できました。

select employee.EMP_ENG_NAME_P1, employee.EMP_ENG_NAME_P2, users.USER_ID, COUNT(privileg.ID)
from employee
  INNER JOIN users on users.USER_EMP = employee.EMP_ID
  INNER JOIN privileg on users.ID= privileg.USER_ID
GROUP BY users.ID 

2 番目のクエリ:

select employee.EMP_ENG_NAME_P1, employee.EMP_ENG_NAME_P2, users.USER_ID, users.ID, COUNT(pages.ID)
from employee
  INNER JOIN users on users.USER_EMP = employee.EMP_ID
  INNER JOIN pages on users.ID = pages.userCreatorID
GROUP BY users.ID

今必要なのは、次の画像のように ここに画像の説明を入力 、次のクエリを使用してそれらを結合することです。

select employee.EMP_ENG_NAME_P1,employee.EMP_ENG_NAME_P2, users.USER_ID, users.ID, COUNT(pages.ID), COUNT(privileg.ID) 
from employee 
INNER JOIN users on users.USER_EMP=employee.EMP_ID 
INNER JOIN privileg on users.ID= privileg.USER_ID 
INNER JOIN pages on users.ID= pages.userCreatorID 
GROUP BY users.ID

しかし、カウント結果は正しくありません。乗算されます

何か案は?

4

2 に答える 2

0

試す:

SELECT employee.EMP_ENG_NAME_P1, employee.EMP_ENG_NAME_P2, users.USER_ID, COUNT(privileg.ID), COUNT(pages.ID)
FROM employee
  INNER JOIN users on users.USER_EMP = employee.EMP_ID
  INNER JOIN privileg on users.ID= privileg.USER_ID
  INNER JOIN pages on users.ID = pages.userCreatorID
GROUP BY users.ID 
于 2015-07-06T10:40:29.140 に答える
0

それを試してみてください-

SELECT emp.EMP_ENG_NAME_P1, emp.EMP_ENG_NAME_P2, usr.USER_ID, COUNT(DISTINCT prv.ID), COUNT(DISTINCT pgs.id)
FROM employee emp 
INNER JOIN users usr ON usr.USER_EMP = emp.EMP_ID 
INNER JOIN privileg prv ON usr.ID= prv.USER_ID 
INNER JOIN pages pgs ON usr.ID= pgs.UserCreatorID  
GROUP BY users.ID 
于 2015-07-06T10:41:52.563 に答える