Помогите решить проблему с выборкой из базы!

Статус
В этой теме нельзя размещать новые ответы.

Acidrayne

Местный житель
Регистрация
30 Сен 2007
Сообщения
296
Реакции
20
Помогите мне пожалуйста решить проблему!

есть 2 таблицы (на самом деле их больше но работать мы будем с этими!)

PHP:
TABLE `user` (
  `id` int(2) NOT NULL auto_increment,
  `login` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `pasw` varchar(255) NOT NULL,
  `familiya` varchar(255) NOT NULL,
  `adress` varchar(255) NOT NULL,
  `ip` varchar(255) NOT NULL,
  `tarif` varchar(255) NOT NULL,
  `date` date NOT NULL,
  `vkl` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
#########################################

TABLE `oplata` (
  `id` int(1) NOT NULL auto_increment,
  `user_id` varchar(255) NOT NULL,
  `data` date NOT NULL,
  `dengi` float NOT NULL default '0',
  `prim` text NOT NULL,
  PRIMARY KEY  (`id`)


Так вот как вывести данные из этих таблиц, чтобы привести их к следующему виду:

date |user1|User2|user|user4|
2010.01 |dengi|dengi|dengi|dengi|
2010.02 |dengi|dengi|dengi|dengi| и т.д

просто ума не приложу, вначале в цикле вывожу в строку всех пользователей, а как потом вывести из таблицы oplata деньги с привязкой к конкретному пользователю + чтобы в каждой строке сортировка по месяцу и году!?

Пробовал выводить их в цикле но блин получается очень много запросов к базе вообщем ломаю голову ! Помогите ....
 
Не в цикле не выйдет.
Разве что
Код:
SELECT oplata.data,oplata.dengi,user.login 
FROM oplata LEFT JOIN user ON user_id=user.id 
ORDER BY oplata.data

Но тогда это будет список вида
2010.01 | user1 | dengi
2010.01 | user2 | dengi
2010.01 | user3 | dengi
2010.02 | user1 | dengi
2010.02 | user3 | dengi
...

Т.е. мускул сам тебе эти две таблицы в одну не свернет, придется руками потом сворачивать.

Типа, когда будешь выгребать это и выводить на экран, то смотри дату и если дата такая же как у предыдущей записи - то дописываешь в строку, а если сменилась - то <br>$date и пошли шуровать новую строку.
 
подскажите может стоит реорганизовать таблицу ? просто этот проект пишеться мной с нуля, и поэтому могу чтото поменять - лижбы был толк! Это моя первая работа на php + mysql и поэтому я еще не силен в проектировании баз данных, может стоит изменить струтуру таблицы ? Подскажите пожалуйста
 
попробуйте такой запрос, указав в условие для запроса список идентификаторов пользователей
Код:
SELECT data, GROUP_CONCAT(dengi ORDER BY user_id ASC SEPARATOR '|')
FROM oplata
WHERE user_id IN ([I]user_ids[/I])
GROUP BY data
ORDER BY data
 
Код:
SELECT DATE_FORMAT(o.data, '%Y.%m') date, SUM(IF(u.id=1, o.dengi, 0)) user1, SUM(IF(u.id=2, o.dengi, 0)) user2, SUM(IF(u.id=3, o.dengi, 0)) user3
FROM user u
LEFT JOIN oplata o ON u.id=o.user_id
GROUP BY YEAR(data), MONTH(data)
проблема только, что надо отдельно список юзеров (SUM(IF(u.id=1, o.dengi, 0)) user1, SUM(IF(u.id=2, o.dengi, 0)) user2 и т. д.) вставлять в запрос, но можно сгенерировать с php
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху