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

  • Автор темы Автор темы dEn
  • Дата начала Дата начала

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
Нет
 
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 ...
 
А если не UNION?
Может быть я просто не корректно сформклировал вопрос...

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

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

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