mysql составление select для поиска по нескольким тэгам
Вечер добрый, я тут новенький! просьба камнями не закидывать) Мне необходима помощь в составлении селекта для поиска записей по нескольким тэгам как с условием И так и с ИЛИ, с этим я более менее разобрался. mysql 5.6.45 python 3
SELECT col1
FROM table1 t1
JOIN table3 t3 ON t1.id=t3.id
JOIN table2 t2
WHERE t3.id = (список id)
GROUP by col1 DESC
ORDER BY COUNT(t3.id)
Остался не решенным вопрос, как запихнуть в этот селект список тэгов, понимаю что это просто, но голова отказывается думать
self.cursor.execute("SELECT col1 FROM table1 t1 JOIN table2 t2 ON t1.id=t2.id JOIN table3 t3 WHERE t2.idTag IN VALUES(%s) GROUP by col1 ORDER BY COUNT(t2.id) DESC",tupleIdTag)
думал что подойдёт конструкция такого типа,но здесь я так понял неверно составлено, так как добавление списка tupleIdTag с несколькими значениями приводит к ошибке
TypeError: not all arguments converted during string formatting
Видел другую конструкцию вида
SELECT A.row_id, A.name FROM A
INNER JOIN B ON (B.table_a_id = A.row_id)
WHERE B.status_id = 1 OR B.status_id = 2
GROUP BY A.row_id, A.name
HAVING SUM(1) = 2
Но непонятно как сделать абстрактную версию данного запроса?
Единственное что приходит в голову это создание словаря с разным количеством OR и выбор по длине входящего списка с тэгами, не знаю насколько это верно
`dictionary = {'1': ' SELECT A.row_id, A.name FROM A
INNER JOIN B ON (B.table_a_id = A.row_id)
WHERE B.status_id = list[0]
GROUP BY A.row_id, A.name',
'2': ' SELECT A.row_id, A.name FROM A
INNER JOIN B ON (B.table_a_id = A.row_id)
WHERE B.status_id = list[0] or B.status_id = list[1]
GROUP BY A.row_id, A.name',
'3': ' SELECT A.row_id, A.name FROM A
INNER JOIN B ON (B.table_a_id = A.row_id)
WHERE B.status_id = list[0] OR B.status_id = list[1]
OR B.status_id = list[2]
GROUP BY A.row_id, A.name',
'4': ' и т.п.'}`