[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: В какой из двух таблиц MySQL находится запись?
linf
Собственно говоря, можно ли как нибуть в один заход (запрос) проверить в какой из двух таблиц MySQL содержится запись, и в зависимости от этого вывести:

if (....) {в таблице 1}
elseif (....) {в таблице 2}
else {нигде}


+ получить данные строки, из той или иной таблицы.

Собственно говоря, не хочу городить огород из двух запросов, или второй запрос делать в зависимости от условия первого.

Если есть красивое решение, подскажите.



Спустя 14 минут, 29 секунд (23.07.2012 - 15:06) vagrand написал(а):
Никак нельзя, вам в любом случае нужно будет выполнить 2а запроса

Спустя 31 минута, 56 секунд (23.07.2012 - 15:38) dron4ik написал(а):
можно одним запросом и проверить и вывести, но если возникнет ситуация что совпадут параметры, могут быть проблемы...

Спустя 1 час, 1 минута, 55 секунд (23.07.2012 - 16:40) vagrand написал(а):
Цитата (dron4ik @ 23.07.2012 - 12:38)
можно одним запросом и проверить и вывести, но если возникнет ситуация что совпадут параметры, могут быть проблемы...

Хмм, интересно каким оразом, можете привести пример такого чудесного запроса?

Спустя 41 минута, 27 секунд (23.07.2012 - 17:22) ihaveabiggun написал(а):

Спустя 3 минуты, 33 секунды (23.07.2012 - 17:25) dron4ik написал(а):
Цитата (vagrand @ 23.07.2012 - 13:40)
Цитата (dron4ik @ 23.07.2012 - 12:38)
можно одним запросом и проверить и вывести, но если возникнет ситуация что совпадут параметры, могут быть проблемы...

Хмм, интересно каким оразом, можете привести пример такого чудесного запроса?

Та простой Select из двух таблиц по знаменателю с *... ну а потом обработать полученое и понять откуда оно взялось.

Спустя 13 минут, 8 секунд (23.07.2012 - 17:38) vagrand написал(а):
Просой селек из двух таблиц выведет все данный из одной и другой таблиц, а это совсем не то что нужно ТС-у

Спустя 1 минута, 1 секунда (23.07.2012 - 17:39) vagrand написал(а):
Цитата
Подойдёт ?!

http://www.mysql.ru/docs/man/UNION.html


UNION всего лиш объединяет результаты двух запросов в один, все равно оба запроса будут выполнены.

Спустя 3 часа, 19 минут, 16 секунд (23.07.2012 - 20:59) linf написал(а):
$sql = "(SELECT `id`,`title`,`image`,`cat`,'base' AS `table` FROM `base` WHERE `title`='$link') ";
$sql.= "UNION ALL (SELECT `id`,`title`,NULL,NULL,'category' AS `table` FROM `category` WHERE `title`='$link')";


Юнион помог, спасибо.
Даже имя таблицы которой принадлежит выборка, можно узнать.

Теперь хотелось бы прям в этом запросе, сделать следующее,если данные выводятся из таблицы `category`, то присоединить все строки из таблицы `base` где `base`.`cat` = `category`.`id`

Конечно можно было бы все это разбавить PHP, и написать еще запрос, но хочется пописать на SQL это тоже ведь язык, да и работать думаю будет быстрее. ;)

Спустя 11 минут, 52 секунды (23.07.2012 - 21:11) inpost написал(а):
могу дать совет - разбивай!

Спустя 6 минут, 28 секунд (23.07.2012 - 21:17) linf написал(а):
Цитата (inpost @ 23.07.2012 - 22:11)
могу дать совет - разбивай!

почему?

Кстати, что скажешь, если я в самом начале, выберу все таблицы и засуну их например в сессии, это нормальное?

P.S. И что же с запросом делать.

Спустя 18 минут, 9 секунд (23.07.2012 - 21:35) ihaveabiggun написал(а):
Что-то типа того:

SELECT table_a.*, 1 tablenum FROM table_a
UNION ALL
SELECT
table_b.*, 2 FROM table_b
ORDER BY 1



Спустя 29 минут, 11 секунд (23.07.2012 - 22:04) linf написал(а):
Цитата (ihaveabiggun @ 23.07.2012 - 22:35)
Что-то типа того:

SELECT table_a.*, 1 tablenum FROM table_a
UNION ALL
SELECT
table_b.*, 2 FROM table_b
ORDER BY 1

не то, это я уже сделал

Спустя 19 минут, 2 секунды (23.07.2012 - 22:23) linf написал(а):
Пытаюсь так, но что то не работает:

$sql = "SELECT * FROM(SELECT `id`,`title`,`image`,`category`,'base' AS `table` FROM `base` 
UNION SELECT `id`,`title`,NULL,NULL,'category' AS `table` FROM `category`)
AS U LEFT JOIN `base` ON `base`.`category`=U.`id` "
;

Спустя 10 часов, 57 минут, 51 секунда (24.07.2012 - 09:21) vagrand написал(а):
linf

Я еще раз повторяю - нет практически никакой разницы между выполнением двух запросов связанных через UNION и выполнением двух отдельных запросов. Более того в твоем случае UNION даже хуже, т.к. он в любом случае выполнит оба запроса, а вот если выполнять их по почереди с проверкой, то выполнение второго запроса может и не понадобится.

Что же каксается следующего запроса то это просто кошмар оптимизатора, тут тебе и подзапрос и LEFT JOIN.

SELECT * FROM(SELECT `id`,`title`,`image`,`category`,'base' AS `table` FROM `base` 
UNION SELECT `id`,`title`,NULL,NULL,'category' AS `table` FROM `category`)
AS U LEFT JOIN `base` ON `base`.`category`=U.`id`

Спустя 38 минут, 7 секунд (24.07.2012 - 09:59) inpost написал(а):
простые запросы быстрее работают, чем юнионы и джоины... А кешировать результат можно в обоих случаях, только бд будет проще...


_____________
Live in new format =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.