Возможно ли объединить запросы

dEn

Guest
Возможно ли объединить запросы

Господа, возможно ли объеденить нескеолько нижеперечисленных запросов в один?

SELECT html FROM banners WHERE type=1 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=2 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=4 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=6 ORDER BY RAND() LIMIT 0,1
 

Участник

Новичок
Re: Возможно ли объединить запросы

Автор оригинала: dEn
Господа, возможно ли объеденить нескеолько нижеперечисленных запросов в один?

SELECT html FROM banners WHERE type=1 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=2 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=4 ORDER BY RAND() LIMIT 0,1

SELECT html FROM banners WHERE type=6 ORDER BY RAND() LIMIT 0,1
Нет
 

chira

Новичок
dEn

перефразируя предыдущего оратора,
если MySQL версия больше 4.0
можно использовать UNION
Код:
(SELECT html FROM banners WHERE type=1 ORDER BY RAND() LIMIT 0,1)
UNION ALL
(SELECT html FROM banners WHERE type=2 ORDER BY RAND() LIMIT 0,1)
UNION ALL ...
 

dEn

Guest
А если не UNION?
Может быть я просто не корректно сформклировал вопрос...

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

dimka-747

Новичок
Вопрос довольно распространенный, но на него не нашел до сих пор ответа. Может его и нету, но все-таки , время утекло много с тех пор как задался первый раз им.
Есть запрос mysql на добавление записи.
INSERT INTO `tags` (`tag`) VALUES ('чемпион');
Есть второй запрос на получение id.
SELECT LAST_INSERT_ID();
Вопрос. Можно ли их объединить в один? Ведь между выполнением 1го и 2го может проскочить ещё один INSERT из другого скрипта от другого пользователя.
Или здесь нужно использовать транзакции?
Как вариант использовать SELECT * FROM `tags` WHERE `tag`='чемпион'; но если у нас не 'чемпион' а какой-нибудь текст размером в пол мегабайта, то это не удобно.
Предложите пожалуйста оптимальное решение.
 

dimka-747

Новичок
Между выполнениями
INSERT INTO `tags` (`tag`) VALUES ('чемпион');
и
SELECT LAST_INSERT_ID();
при большой активности, кто то может сделать ещё один INSERT, к примеру
INSERT INTO `tags` (`tag`) VALUES ('барашка');

и тогда SELECT LAST_INSERT_ID(); вернет чужой ID, не чемпиона а барашки;

Или я ошибаюсь?
 

dimka-747

Новичок
Хоть и говорят на форумах, что эта функция не особо надежная, но думаю дело было в неправильном использовании. Спасибо за решение, вопрос снят.
 
Сверху