|
|
|
| Всем добрый день. Делаю не сложный запрос к БД
SELECT `company`.`form`, `company`.`system`, `calendar`.`id`, `calendar`.`date_start`, `calendar`.`date_finish`,
`calendar`.`report`, `calendar`.`what`, `calendar`.`where` FROM `company`, `calendar`
WHERE `calendar`.`system`=`company`.`system` and `company`.`id`='$page' and `company`.`form` IN (`calendar`.`form`)
ORDER BY `calendar`.`date_finish`
|
`company`.`form` IN (`calendar`.`form`) - при помощи этого пытаюсь собрать данные, где есть соответствие. Например:
"слово IN (слово, еще что-то, 123)
Если в `calendar`.`form` одно значение, то отображает, если несколько ничего не срабатывает.
Почему? Подскажите, пожалуйста. | |
|
|
|
|
|
|
|
для: kapitalist
(03.06.2015 в 11:30)
| | без фрагмента дампа?
Та ну его... | |
|
|
|
|
|
|
|
для: Trianon
(03.06.2015 в 14:21)
| |
CREATE TABLE IF NOT EXISTS `calendar` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_start` date NOT NULL,
`date_finish` date NOT NULL,
`report` varchar(255) NOT NULL,
`system` varchar(5) NOT NULL,
`form` varchar(20) NOT NULL,
`what` enum('pay','report') NOT NULL,
`where` enum('ИФНС','ПФР','ФСС') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=66 ;
--
-- Дамп данных таблицы `calendar`
--
INSERT INTO `calendar` (`id`, `date_start`, `date_finish`, `report`, `system`, `form`, `what`, `where`) VALUES
(52, '2015-07-01', '2015-07-25', 'Оплата УСН за полугодие 2015 года', 'УСН', 'ИП', 'pay', 'ИФНС'),
(53, '2015-10-01', '2015-10-25', 'Оплата УСН за 9 месяцев 2015 года', 'УСН', 'ИП', 'pay', 'ИФНС'),
(56, '2016-04-01', '2016-04-25', 'Оплата УСН за первый квартал 2016 года', 'УСН', 'ИП', 'pay', 'ИФНС'),
(57, '2015-01-01', '2015-04-30', 'Подача налоговой декларации УСН за 2014 год', 'УСН', 'ИП', 'report', 'ИФНС'),
(58, '2016-01-20', '2016-04-30', 'Оплата налога УСН за 2015 год', 'УСН', 'ИП', 'pay', 'ИФНС'),
(59, '2015-03-01', '2015-03-31', 'Заплатить страховые взносы за I квартал 2015 года', 'УСН', 'ИП', 'pay', 'ПФР'),
(60, '2015-06-01', '2015-06-30', 'Заплатить страховые взносы за II квартал 2015 года', 'УСН', 'ИП', 'pay', 'ПФР'),
(61, '2015-09-01', '2015-09-30', 'Заплатить страховые взносы за III квартал 2015 года', 'УСН', 'ИП', 'pay', 'ПФР'),
(62, '2015-12-01', '2015-12-31', 'Заплатить страховые взносы за IV квартал 2015 года', 'УСН', 'ИП', 'pay', 'ПФР'),
(63, '2016-01-01', '2016-04-30', 'Подача налоговой декларации УСН за 2015 год', 'УСН', 'ИП', 'report', 'ИФНС'),
(64, '2015-01-01', '2015-05-31', 'Заплатить УСН за IV квартал', 'УСН', 'ООО,ЗАО', 'pay', 'ИФНС'),
(65, '2015-01-01', '2015-05-31', 'Подать декларацию УСН за год', 'УСН', 'ООО, ЗАО, ОАО', 'report', 'ИФНС');
CREATE TABLE IF NOT EXISTS `company` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`adres` varchar(255) NOT NULL,
`account` varchar(255) NOT NULL,
`inn` varchar(255) NOT NULL,
`kpp` varchar(255) NOT NULL,
`bik` varchar(255) NOT NULL,
`kor_account` varchar(255) NOT NULL,
`phone` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`nds` int(2) NOT NULL,
`logo` varchar(255) NOT NULL,
`sait` varchar(255) NOT NULL,
`bank` text NOT NULL,
`gendir` varchar(255) NOT NULL,
`glavbuh` varchar(255) NOT NULL,
`form` varchar(100) NOT NULL,
`wbbeditor` text NOT NULL,
`garant_text` text NOT NULL,
`sign1` varchar(255) NOT NULL,
`sign2` varchar(255) NOT NULL,
`press` varchar(255) NOT NULL,
`saler` varchar(255) NOT NULL,
`buyer` varchar(255) NOT NULL,
`who` varchar(255) NOT NULL,
`pay` varchar(255) NOT NULL,
`system` varchar(5) NOT NULL,
`percent` varchar(5) NOT NULL,
`okpo` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1018 ;
INSERT INTO `company` (`id`, `name`, `adres`, `account`, `inn`, `kpp`, `bik`, `kor_account`, `phone`, `email`, `nds`, `logo`, `sait`, `bank`, `gendir`, `glavbuh`, `form`, `wbbeditor`, `garant_text`, `sign1`, `sign2`, `press`, `saler`, `buyer`, `who`, `pay`, `system`, `percent`, `okpo`) VALUES
(1, 'Иванов В. А.', '', '', '', '', '', '', '', '', 0, '', '', '', '', '', 'ИП', '', '', '', '', '', '', '', '', '', '', '', ''),
(7, 'Офисофф', '', '', '', '', '', '', '', '', 0, '', '', '', '', '', 'ООО', '', '', '', '', '', '', '', '', '', 'УСН', '-7', '123');
|
| |
|
|
|
|
|
|
|
для: kapitalist
(03.06.2015 в 11:30)
| | Правый аргумент операции IN - список значений, а не значение-строка перечисленных через запятую слов.
Поэтому, ни одно такое составное значение не выдерживает проверки.
Вообще-то списочные данные так не хранят.
Хотя если сильно спичит, можно обратить внимание на функцию FIND_IN_SET() - она как раз такого - неряшливого свойства. | |
|
|
|
|
|
|
|
для: Trianon
(03.06.2015 в 22:54)
| | Спасибо. А какой есть еще вариант для хранения таких данных?
В таблице хранится список из трех значений, имхо проще искать примерно так.
Я понимаю, что по сути можно было бы создать дополнительную таблицу и хранить все там, это было бы красивее, но не быстрее. | |
|
|
|
|
|
|
|
для: kapitalist
(04.06.2015 в 08:57)
| | вот в таблице и хранят.
И это быстрее.
Потому что на эти операции, вроде FIND_IN_SET, индекс не натянешь, а на столбик - другой таблицы - вполне себе. | |
|
|
|
|