MySQLクエリに問題があります。結果のGROUP_CONCAT配列の最初の項目の結果のみを返します。つまり、結果の配列は[1,3,4]であり、ユーザーID1のみの質問が返されます。
$query_search = "SELECT questionnaires_index.id, questionnaires_index.ea_num, questionnaires_index.address, questionnaires_index.status, questionnaires_index.json_stored, users.username FROM questionnaires_index INNER JOIN users ON users.id = questionnaires_index.interviewer_id WHERE questionnaires_index.interviewer_id IN (SELECT GROUP_CONCAT(id) FROM users WHERE supervisor = (SELECT id FROM users WHERE username = '".$username."'))";
GROUP_CONCATを間違って使用していますか?これを行うためのより良い方法はありますか?
編集1 このクエリで使用されるSQLテーブルは次のとおりです
CREATE TABLE IF NOT EXISTS `questionnaires_index` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ea_num` int(10) unsigned NOT NULL,
`address` varchar(100) NOT NULL,
`interviewer_id` int(10) unsigned NOT NULL,
`status` varchar(30) NOT NULL DEFAULT 'Available',
`json_stored` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
--
-- Dumping data for table `questionnaires_index`
--
INSERT INTO `questionnaires_index` (`id`, `ea_num`, `address`, `interviewer_id`, `status`, `json_stored`) VALUES
(1, 101, '29 De Havilland Crescent Pro Park, Building 1 Persequor Technopark Pretoria 0020', 1, 'Non Contact', 1),
(2, 102, '5th Floor, Imperial Bank Terraces Carl Cronje Drive Tyger Waterfront Bellville 7530', 1, 'Available', 0),
(3, 101, '29 De Havilland Crescent Pro Park, Building 1 Persequor Technopark Pretoria 0020', 3, 'Partially Completed', 0),
(4, 102, '5th Floor, Imperial Bank Terraces Carl Cronje Drive Tyger Waterfront Bellville 7530', 3, 'Available', 0),
(5, 201, '101 test address', 4, 'Available', 0);
そしてユーザーのために:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`supervisor` int(10) unsigned NOT NULL,
`version_code` varchar(10) NOT NULL,
`is_interviewer` tinyint(1) NOT NULL DEFAULT '0',
`is_supervisor` tinyint(1) NOT NULL DEFAULT '0',
`surname` varchar(50) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `users`
--
INSERT INTO `users` (`id`, `username`, `password`, `supervisor`, `version_code`, `is_interviewer`, `is_supervisor`, `surname`) VALUES
(1, 'Rynardt', 'q', 2, '2.2.0', 1, 0, ''),
(2, 'Herholdt', 'q', 0, '2.2.0', 0, 1, ''),
(3, 'test', 'test', 2, '2.2.0', 1, 0, ''),
(4, 'Botha', 'q', 2, '', 1, 0, '');
編集2 私がやろうとしていることに関する詳細情報:
私が作成した編集を見ると、SQLテーブルが含まれていることがわかります。u.supervisorは、usersテーブルのスーパーバイザエントリのIDを示すopタイプの整数です。$ usernameは文字列型で、スーパーバイザーの名前を示します。したがって、最初にスーパーバイザーのIDを取得してから、以前に見つかったIDのスーパーバイザーを持つユーザーのすべてのIDを取得する必要があります。次に、このusers.idの配列を使用して、これらのユーザーに関連付けられているすべての質問票を取得し、スーパーバイザーがログインしたときにそれを表示します。