SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.11.2011 01:35:17

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Помогите пожалуйста. Сложный запрос.

Добрый вечер. Вот такая проблема:База данных детский садик. есть 4 таблицы: Группы(номер_группы, название), Составы_групп(номер_группы, номер_ребёнка), Дети(номер_ребёнка, ФИО, льгота(если стоит знасение 1, то нет льготы, если 2 - то есть), дата рождения), заявы (номер заявы, дата заявы). Есть три групы до 4 лет, до 5  и до 6. На количество строк в таблице Состав_групп стоит ограничение MAX_ROWS=25. При отборе детей в группы сначало отбираются льготники. лимит на льготников в каждой группе должен составлять 5 детей. Нужно создать триггер или запрос, что-бы при запуске выполнялась проверка свободных мест вообще(для заполнения лимита детей), проверка льготных мест(для заполнения лимита льготников), и выполнялась вставка из таблицы заявы в Состав_групп(с учётом возраста, свободных мест, льгот). что делать не знаю. помогите!

Неактивен

 

#2 17.11.2011 01:41:06

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Приведите все таблицы (show create table `ИМЯ_ТАБЛИЦЫ`) и их данные  - в-общем дамп Вашей базы.
В такой форме, как, например, здесь.

Нужно создать триггер или запрос, что-бы при запуске выполнялась проверка свободных мест

При запуске чего?

Отредактированно deadka (17.11.2011 01:41:41)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 17.11.2011 01:46:58

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

create table Groups
(id_group int(4) NOT NULL UNIQUE AUTO_INCREMENT,
name varchar(10) NOT NULL,
primary key (id_group))

create table Children
(id_children int(4) NOT NULL UNIQUE AUTO_INCREMENT,
FIO varchar(30) NOT NULL,
date_birth date NOT NULL,
lgota smallint NOT NULL,
primary key (id_children))

create table Aplicant
(id_aplicant int (4) NOT NULL UNIQUE AUTO_INCREMENT,
id_lgoty int(4) NOT NULL,
id_children int(4) NOT NULL,
date_aplicant date NOT NULL,
primary key (id_aplicant),
foreign key (id_lgoty) references Lgoty(id_lgoty),
foreign key (id_children) references Children(id_children))

create table Composition_groups
(id_children int(4) NOT NULL,
id_group int(4) NOT NULL,
primary key (id_children, id_group))   

ALTER TABLE Composition_groups
MAX_ROWS=25;


база пока-что пуста.
При запуске запроса формирования состава групп.

Неактивен

 

#4 17.11.2011 01:49:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Для того, чтобы проверить наличие свободных мест нужно иметь какие-то данные в таблицах wink, чтобы было из чего их вычислять. Приведите данные и принцип расчет свободных мест - попробую оформить в sql-виде.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 17.11.2011 01:52:43

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

нужен просто список детей, групп, заявок? правильно?

Неактивен

 

#6 17.11.2011 01:53:22

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

ну да, все данные, которые нужны для расчета.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 17.11.2011 02:25:33

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

дамп кидать? я не знаю как сюда таблицу кинуть.

Неактивен

 

#8 17.11.2011 02:26:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

лучше дамп конечно. текстом или файл приложите к сообщению.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 17.11.2011 02:27:44

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Nov 16, 2011 at 11:24 PM
-- Server version: 5.1.40
-- PHP Version: 5.3.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `detsad`
--

-- --------------------------------------------------------

--
-- Table structure for table `Aplicant`
--

CREATE TABLE IF NOT EXISTS `Aplicant` (
  `id_aplicant` int(4) NOT NULL AUTO_INCREMENT,
  `id_children` int(4) NOT NULL,
  `date_aplicant` date NOT NULL,
  PRIMARY KEY (`id_aplicant`),
  UNIQUE KEY `id_aplicant` (`id_aplicant`),
  KEY `id_children` (`id_children`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=103 ;

--
-- Dumping data for table `Aplicant`
--

INSERT INTO `Aplicant` (`id_aplicant`, `id_children`, `date_aplicant`) VALUES
(48, 62, '2011-11-01'),
(49, 63, '2011-11-01'),
(50, 64, '2011-11-09'),
(51, 65, '2011-11-09'),
(52, 66, '2011-11-06'),
(53, 67, '2011-11-06'),
(54, 68, '2011-11-06'),
(55, 69, '2011-11-06'),
(56, 70, '2011-11-06'),
(57, 71, '2011-11-02'),
(58, 72, '2011-11-02'),
(59, 73, '2011-11-07'),
(60, 74, '2011-11-07'),
(61, 75, '2011-11-08'),
(62, 76, '2011-11-16'),
(63, 77, '2011-11-16'),
(64, 78, '2011-11-16'),
(65, 79, '2011-11-16'),
(66, 80, '2011-11-16'),
(67, 81, '2011-11-02'),
(68, 82, '2011-11-02'),
(69, 83, '2011-09-13'),
(70, 84, '2011-09-13'),
(71, 85, '2011-09-13'),
(72, 86, '2011-09-09'),
(73, 87, '2011-09-09'),
(74, 88, '2011-07-11'),
(75, 89, '2011-07-18'),
(76, 90, '2011-07-18'),
(77, 91, '2011-07-30'),
(78, 92, '2011-07-30'),
(79, 93, '2011-07-06'),
(80, 94, '2011-07-18'),
(81, 95, '2011-07-13'),
(82, 96, '2011-07-13'),
(83, 97, '2011-07-13'),
(84, 98, '2011-07-13'),
(85, 99, '2011-07-15'),
(86, 100, '2011-07-15'),
(87, 101, '2011-07-15'),
(88, 102, '2011-07-14'),
(89, 103, '2011-07-14'),
(90, 104, '2011-07-14'),
(91, 105, '2011-07-14'),
(92, 106, '2011-07-19'),
(93, 107, '2011-07-13'),
(94, 108, '2011-07-13'),
(95, 109, '2011-07-23'),
(96, 110, '2011-07-21'),
(97, 111, '2011-07-21'),
(98, 112, '2011-07-21'),
(99, 113, '2011-07-11'),
(100, 114, '2011-07-11'),
(101, 115, '2011-07-11'),
(102, 116, '2011-07-11');

-- --------------------------------------------------------

--
-- Table structure for table `Children`
--

CREATE TABLE IF NOT EXISTS `Children` (
  `id_children` int(4) NOT NULL AUTO_INCREMENT,
  `FIO` varchar(30) NOT NULL,
  `date_birth` date NOT NULL,
  `lgota` smallint(1) DEFAULT NULL,
  PRIMARY KEY (`id_children`),
  UNIQUE KEY `id_children` (`id_children`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=117 ;

--
-- Dumping data for table `Children`
--

INSERT INTO `Children` (`id_children`, `FIO`, `date_birth`, `lgota`) VALUES
(62, 'Фавпв', '2006-03-08', 1),
(63, 'АВА', '2006-05-19', 1),
(64, 'кпевк', '2006-05-19', 1),
(65, 'укцеуе', '2006-05-10', 1),
(66, 'укцеуе', '2006-07-05', 1),
(67, 'вукеукеуцеук', '2006-07-10', 1),
(68, 'укцкуц', '2006-07-02', 1),
(69, 'рпкарк', '2006-04-11', 1),
(70, 'уцкуцкц', '2006-04-11', 1),
(71, 'уцкуцкц', '2006-06-09', 2),
(72, 'івкцк', '2006-06-09', 2),
(73, 'уекуцкц', '2006-06-21', 2),
(74, 'цукцкц', '2006-06-21', 2),
(75, 'кцукцук', '2006-06-12', 2),
(76, 'івацкуйц', '2006-06-15', 2),
(77, 'івацкуйц', '2007-06-14', 1),
(78, 'іваіа', '2007-06-06', 1),
(79, 'іаіаів', '2007-06-06', 1),
(80, 'роеро', '2007-09-07', 1),
(81, 'аен', '2007-09-18', 1),
(82, 'пукпеукеку', '2007-09-18', 1),
(83, 'апнукеук', '2007-09-01', 1),
(84, 'парен', '2007-09-01', 1),
(85, 'пукеукеуке', '2007-09-01', 1),
(86, 'пукеукеуке', '2007-09-20', 2),
(87, 'кенук', '2007-09-20', 2),
(88, 'кенук', '2007-09-05', 2),
(89, 'уцекуе', '2007-09-17', 2),
(90, 'кперо', '2007-09-17', 2),
(91, 'куекеуц', '2008-09-05', 1),
(92, 'цукрпа', '2008-09-05', 1),
(93, 'вапвап', '2008-09-05', 1),
(94, 'вар', '2011-11-14', 1),
(95, 'саипм', '2007-09-20', 1),
(96, 'еепркрн', '2007-09-20', 1),
(97, 'варп', '2007-09-20', 1),
(98, 'пк', '2007-09-20', 1),
(99, 'варпуа', '2007-09-22', 1),
(100, 'авп', '2007-09-22', 2),
(101, 'кпп', '2007-09-22', 2),
(102, 'кеку', '2007-09-18', 2),
(103, 'авпе', '2007-09-18', 2),
(104, 'іваі', '2008-10-24', 1),
(105, 'пркеу', '2008-10-24', 1),
(106, 'укпеуку', '2008-10-18', 1),
(107, 'пвапвпав', '2008-10-16', 1),
(108, 'пваві', '2008-10-16', 1),
(109, 'рнекпееке', '2008-10-10', 1),
(110, 'укеукеуце', '2008-10-16', 2),
(111, 'куеуе', '2008-10-16', 2),
(112, 'цкуцк', '2008-10-16', 2),
(113, 'цкуцк', '2008-10-21', 2),
(114, 'цукццк', '2008-10-21', 1),
(115, 'цуекуцкк', '2008-10-21', 1),
(116, 'уеуке', '2009-11-19', 1);

-- --------------------------------------------------------

--
-- Table structure for table `Composition_groups`
--

CREATE TABLE IF NOT EXISTS `Composition_groups` (
  `id_children` int(4) NOT NULL,
  `id_group` int(4) NOT NULL,
  PRIMARY KEY (`id_children`,`id_group`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 MAX_ROWS=25;

--
-- Dumping data for table `Composition_groups`
--


-- --------------------------------------------------------

--
-- Table structure for table `Groups`
--

CREATE TABLE IF NOT EXISTS `Groups` (
  `id_group` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  PRIMARY KEY (`id_group`),
  UNIQUE KEY `id_group` (`id_group`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `Groups`
--

INSERT INTO `Groups` (`id_group`, `name`) VALUES
(1, 'До 4 лет'),
(2, 'До 5 лет'),
(3, 'До 6 лет');

Неактивен

 

#10 17.11.2011 02:32:35

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

фамилии какие попало писал, типа для примера

Неактивен

 

#11 17.11.2011 02:45:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Проверить, как я понимаю, нужно так:

Берем количество детей нужного возраста (допустим, 4-х летние) из заявок и смотрим количество - если меньше 25, то профит.

Дети в возрасте до 4-х лет:

select * from Children where date_birth + interval 4 year > CURRENT_DATE;


Дети в возрасте от 4 до 5 лет:
select * from Children where (date_birth BETWEEN (CURRENT_DATE - interval 5 year) and (CURRENT_DATE - interval 4 YEAR));


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 17.11.2011 02:51:48

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

ет ток я понимаю проверка входимость в группу по возрасту. а ещё проверка свободного места и льготных мест. если есть сводные идёт вставка. и вставляются первые подавшие заяву

Неактивен

 

#13 17.11.2011 02:54:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

льготность проверяется с помощью условия where `lgota` = 1 или where `lgoda` = 2
Свободность мест (как я понял) проверяется исходя из количества записей в таблице Composition_groups. Правда если туда все группы, поместить, то ограничение должно быть не 25, а 25*количество групп.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#14 17.11.2011 02:59:52

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

А как мне это всё вместе записать? это будет вставка в таблицу Состав_групп с выборкой из таблицы Дети по заданому условию?

Неактивен

 

#15 17.11.2011 03:04:13

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Вам виднее, но видимо да.

Проверяем сколько свободных мест в группе нужного возраста
Пытаемся поместить туда 5 льготников из таблицы заявок, если есть места (в каком порядке нужно помещать льготников и нельготников - я, конечно, не знаю).
Если еще остались места - помещаем туда остальных детей (нельготников).

И так с каждой группой.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#16 17.11.2011 03:07:05

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

именно так но как мне всё это по-порядку записать? можете код кинуть?

Неактивен

 

#17 17.11.2011 03:08:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Лучше Вы напишите код, а если будет что-то не получатся - постараюсь подсказать.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#18 17.11.2011 03:14:14

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

Ок. спасибо. О а как сделать чтобы вставка в таблицу Состав_групп происходила автоматически если есть свободное место? чтобы все эти действия выполнялись автоматически

Неактивен

 

#19 17.11.2011 03:17:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Можно повесить триггер на вставку записей в таблицу заявок -  он и будет проверять и вставлять. А можно (и это проще) сделать это на том клиенте, из которого Вы вставляете записи в таблицу заявок


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#20 17.11.2011 03:23:17

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

на счёт клиента чуть-чуть не понял, я делаю вставку через php скрипт сразу в две таблицы Заявы, Дети.

Неактивен

 

#21 17.11.2011 03:25:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

В данном случае php и есть клиент. То есть либо как Вы сейчас делаете - из php в две таблицы - либо триггером.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#22 17.11.2011 03:28:38

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

Ясно. мне как начинающему пока тяжело приходиться. Спасибо

Неактивен

 

#23 17.11.2011 03:30:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите пожалуйста. Сложный запрос.

Дорогу осилит идущий! Совет, о котором не просили - не трогайте пока триггеры, составьте рабочий код в более простом виде, потестируйте. А потом уже переходите к улучшениям типа триггеров.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#24 17.11.2011 03:32:36

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

Спасибо за совет!

Неактивен

 

#25 17.11.2011 03:34:24

Dimaaasex91
Участник
Зарегистрирован: 17.11.2011
Сообщений: 19

Re: Помогите пожалуйста. Сложный запрос.

Я думаю может при отправке заказа сделать проверку на на наличие сводного места в группе, если есть - записать, нет - переместить в заявки?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson