1. PHP: SELECT * FROM users,stats WHERE business_unit='$BU' ORDER BY stat_total Должна выводится статистика по каждому юзеру, который есть БД, а получается следующее: Допустим в бд 2 юзера, 2юзера*2статистики, 4 строки. Иванов Иван Иванович 9131111111 3000 200 50 0 Петров Петр Петрович 9131111111 3000 200 50 0 Иванов Иван Иванович 9070000000 5000 250 100 10 Петров Петр Петрович 9070000000 5000 250 100 10 Т.е. все существующие статистики подставляются по почереди всем существующим юзерам. Аномалия А если в БД 10 юзеров, то 100 строк и т.д. 2. PHP: SELECT t.*,s.* FROM users t left outer join stats s on t.id=s.stat_user and s.stat_user is not null and s.stat_year='$year' and s.stat_month='$month' WHERE t.business_unit='{$_SESSION['business_unit']}' ORDER BY t.lastname" Этот запрос выводит информацию так как нужно, т.е. по каждому пользователю только его статистику, но не полностью. Он не выводит последние 3 столбца, значения полей stat_total, stat_personal, stat_rouming из таблицы stats.
нормальная реакция, описана в большинстве учебников в самом начале главы про запросы с объединённых таблиц. запрос выглядит вроде правильно. можешь дать дампы таблиц с 2-3 значениями ?
Очень даже странно В каком смысле "где"? users [sql]CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `business_unit` varchar(10) COLLATE utf8_unicode_ci NOT NULL, `lastname` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `firstname` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `dostup` enum('0','1','2') COLLATE utf8_unicode_ci NOT NULL, `doa` date NOT NULL, `dod` date NOT NULL, `month_limit` int(11) NOT NULL, `phone_number` varchar(11) COLLATE utf8_unicode_ci NOT NULL, `login` varchar(15) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `linemanager` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `Email` varchar(50) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=24 ; -- -- Dumping data for table `users` -- INSERT INTO `users` (`id`, `business_unit`, `lastname`, `firstname`, `dostup`, `doa`, `dod`, `month_limit`, `phone_number`, `login`, `password`, `linemanager`, `Email`) VALUES (1, 'ISO', 'Ivanov', 'Ivan', '0', '2010-11-09', '0000-00-00', 3000, '9030000000', 'I.Ivanov', 'a2c96953ccf4d486964947f175878c1c', '', [email='ivan@google.com]'ivan@google.com[/email]'), (2, 'ISO', 'Petrov', 'Petr', '2', '2011-03-30', '0000-00-00', 5000, '9131111111', 'P.Petrov', 'a2c96953ccf4d486964947f175878c1c', '', [email='petr@google.com]'petr@google.com[/email]'), [/sql] [sql]CREATE TABLE IF NOT EXISTS `stats` ( `stat_rowid` int(11) NOT NULL AUTO_INCREMENT, `stat_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `stat_user` int(11) NOT NULL, `stat_year` year(4) NOT NULL, `stat_month` tinyint(4) NOT NULL, `stat_unit` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `stat_total` decimal(16,2) NOT NULL, `stat_personal` decimal(16,2) NOT NULL, `stat_rouming` decimal(16,2) NOT NULL, PRIMARY KEY (`stat_rowid`), UNIQUE KEY `stat_phone` (`stat_phone`,`stat_user`,`stat_year`,`stat_month`,`stat_unit`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; -- -- Dumping data for table `stats` -- INSERT INTO `stats` (`stat_rowid`, `stat_phone`, `stat_user`, `stat_year`, `stat_month`, `stat_unit`, `stat_total`, `stat_personal`, `stat_rouming`) VALUES (1, '9131111111', 2, 2011, 2, 'ISO', 5499.17, 13.28, 0.00), (2, '9030000000', 1, 2011, 2, 'ISO', 215.46, 72.37, 0.00);[/sql] Ну вот как-то так
McLotos у меня выводит все поля на запрос [sql]SELECT t.*,s.* FROM users t join stats s on t.id=s.stat_user[/sql] для всех пользователей или только для некоторых?
Не выводит для всех. А Ваш вариант запроса вообще матерится =) Странно это всё. Суть вот в чём. Нужно чтобы в таблице отображалось: Фамилия, имя, номер телефона, баланс, потрачено, personal, rouming. Но ещё и так, чтобы учитывалась дата. Т.е. по логике, второй вариант моего запроса самый логичный, но почему-то он не выводит последние 3 колонки, он вообще не видит эти данные, хотя в таблице они есть, сами видели.
это точно. возможно стоит для начала попробовать запрос, соединяющий две таблицы, чтобы посмотреть выводятся ли все столбцы. и лишь затем вводить условия по одному, проверяя правильность вывода.
Всмысле? Можно точнее? Запрос в самом php файле. Кстати запускал этот запрос в phpMyAdmin там выводятся все данные по юзерам, а данные из таблицы стат выводядся как NULL. Хотя таблица не пуста.
Возился в phpMyAdmin, генерируя постоянно новые запросы, пришёл к такому запросу SELECT lastname,firstname,phone_number,month_limit,stat_total,stat_rouming,stat_personal FROM users,stats WHERE stat_total is not null and id=stat_user Выводит то что нужно и так как нужно, но как сделать теперь чтобы ещё и дата учитывалась?