Цитата |
$val=['SELECT 1 AS `id`','3','344']; implode ( ' UNION SELECT ', $val); А вот сам запрос я не понял. Что там за "SELECT 1"? |
Цитата |
Мне кажется, что мой запрос с group_concat будет более правильным |
"SELECT 1 FROM `tab` WHERE `int2` = ALL ('".implode("','",$val)."')"
Цитата |
Сделаю наверное циклом через php там есть вероятность, что отсутвуюшее значение будет угадано и тогда стоп... |
Цитата (Valick @ 8.07.2014 - 20:29) |
я всё-таки знаю вариант решения задачи, на уровне СУРБД |
SELECT 1
FROM `tab0`
LEFT JOIN `tab` ON `int1`=38 AND `int2`=`tab0`.`id`
WHERE `tab0`.`id` IN (802,805,900)
AND `tab0`.`access`=1
AND `tab`.`id` IS NULL
LIMIT 1
Цитата |
Насчет решения твоей "начальной" задачи. Я вчера вечером пытался вспомнить, как я это делал ранее на Постгре и перевести в Мускуль. Почти доделал, но пришлось срочно уезжать по делам. Вот только недавно вернулся. Подумаю - напишу, как найти все эти пустоты. Существенно - без использования второй таблицы. Имеем единственную таблицу, в которой одним "16-этажным" (но на самом деле достаточно простым) запросом находим все пустоты по айди. |
with
ini_sel as
(
select e1.id as id1 , e1.id-1 as id_to, e2.id as id_from
from enums e1
full join
(select id+1 as id
from enums) e2
using( id )
where e1.id is null or e2.id is null
),
lost as
(
select * from
(
select id_to as id, 2::integer as bound from ini_sel
union
select id_from, 1 from ini_sel
) sec_sel
where id is not null and id between (select min(id) from enums) and (select max(id) from enums)
)
select id_from, id_to,
case when id_from = id_to then
id_from::varchar
else
id_from || '-' || id_to
end as range
from
(
select id as id_from, (select id from lost where id>=ext_lost.id and bound=2 limit 1) as id_to
from lost ext_lost
where bound=1
) lost_list
id_from id_to range
3 3 3
10 11 10-11
13 14 13-14
16 23 16-23
Цитата (sergeiss @ 9.07.2014 - 14:44) |
перевести в Мускуль |