TransWikia.com

MySQL. Параметр null == любое значение

Stack Overflow на русском Asked on November 7, 2021

Дана таблица

CREATE TABLE IF NOT EXISTS `docs` (
  `id` int(6) unsigned NOT NULL,
  `p1` varchar(10) NOT NULL,
  `p2` varchar(10) NOT NULL,
  `p3` varchar(10) NOT NULL,
  `p4` varchar(10) NOT NULL,
  `p5` varchar(10) NOT NULL,

  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `p1`, `p2`,`p3`,`p4`,`p5`) VALUES
  ('1', '2', '3', '5', '1', '9'),
  ('2', '1', '2', '9', '6', '4'),
  ('3', '3', '3', '2','1', '9'),
  ('4', '2', '6', '1', '7', '8'),
  ('5', '3', '3', '1', '2', '7'),
  ('6', '3', '2', '1', '8', '3'),
  ('7', '1', '4', '2', '3', '2'),
  ('8', '5', '9', '7', '4', '1');

Нужно написать запрос, в который вместо %p1..%p5 можно подставить значения параметров или null. Если параметр null, то у возвращенных записей этот параметр может быть любым.

— SELECT * FROM docs WHERE p1=%p1 and p2=%p2 and p3=%p3 and p4=%p4 and p5=%p5

One Answer

То, что предлагает Ainar-G в другом ответе будет работать:

SELECT * 
FROM docs 
WHERE (%p1 IS NULL OR p1=%p1) 
AND   (%p2 IS NULL OR p2=%p3) 
...
AND   (%p5 IS NULL OR p5=%p5) 

Но лучше 5 IF в приложении чтобы создать запрос с доступными параметрами, чем такое решение. Поработайте еще раз над дизайном.

Answered by Peter1 on November 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP