В основном у меня есть эти 2 простых mysql таблицы:
CREATE TABLE `users` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL,
`relation` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `mytable` (
`id` int(10) UNSIGNED NOT NULL,
`user` int(10) UNSIGNED NOT NULL,
`data` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`tier` tinyint(3) UNSIGNED NOT NULL,
`parent_id` int(10) UNSIGNED DEFAULT NULL COMMENT 'same table'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `users` (`id`, `name`, `relation`) VALUES
(12, 'user1', 5),
(20, 'user2', NULL),
(21, 'user3', NULL);
INSERT INTO `mytable` (`id`, `user`, `data`, `tier`, `parent_id`) VALUES
(1, 12, 'test1', 1, NULL),
(2, 20, 'test2', 2, 1),
(3, 21, 'test3', 3, 1),
(4, 20, 'test4', 1, NULL);
Мне нужно выбрать все строки из mytable, которые связаны с users.relation = 5
Для этого я использую следующий запрос:
SELECT mytable.*
FROM mytable
LEFT JOIN users ON mytable.user = users.id
WHERE users.relation = 5
Проблема в том, что мне также нужно выбрать строки из mytable
, которые имеют parent_id , связанный с приведенные выше результаты.
WHERE mytable.id = X OR mytable.parent_id = X
В основном в этом примере ожидаемым результатом должны быть все строки mytable, кроме последней (потому что не связано с users.relation = 5)