Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: IN Mysql запрос
 
 автор: kapitalist   (03.06.2015 в 11:30)   письмо автору
 
 

Всем добрый день. Делаю не сложный запрос к БД

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` одно значение, то отображает, если несколько ничего не срабатывает.
Почему? Подскажите, пожалуйста.

  Ответить  
 
 автор: Trianon   (03.06.2015 в 14:21)   письмо автору
 
   для: kapitalist   (03.06.2015 в 11:30)
 

без фрагмента дампа?

Та ну его...

  Ответить  
 
 автор: kapitalist   (03.06.2015 в 15:00)   письмо автору
 
   для: 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');

  Ответить  
 
 автор: Trianon   (03.06.2015 в 22:54)   письмо автору
 
   для: kapitalist   (03.06.2015 в 11:30)
 

Правый аргумент операции IN - список значений, а не значение-строка перечисленных через запятую слов.
Поэтому, ни одно такое составное значение не выдерживает проверки.
Вообще-то списочные данные так не хранят.
Хотя если сильно спичит, можно обратить внимание на функцию FIND_IN_SET() - она как раз такого - неряшливого свойства.

  Ответить  
 
 автор: kapitalist   (04.06.2015 в 08:57)   письмо автору
 
   для: Trianon   (03.06.2015 в 22:54)
 

Спасибо. А какой есть еще вариант для хранения таких данных?
В таблице хранится список из трех значений, имхо проще искать примерно так.
Я понимаю, что по сути можно было бы создать дополнительную таблицу и хранить все там, это было бы красивее, но не быстрее.

  Ответить  
 
 автор: Trianon   (04.06.2015 в 22:37)   письмо автору
 
   для: kapitalist   (04.06.2015 в 08:57)
 

вот в таблице и хранят.
И это быстрее.
Потому что на эти операции, вроде FIND_IN_SET, индекс не натянешь, а на столбик - другой таблицы - вполне себе.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования