[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из двух таблиц
aH6y
Есть две таблицы: table1 и table2. В каждой существуют поля с названием login. База данных mysql.

Задача: проверить существует ли поле login со значением $login в обоих таблицах одним запросом.

У меня получилось:

$res = mysql_query("SELECT * FROM `table1`, `table2` WHERE table1.login='$login' OR table2.login='$login'");
if (mysql_num_rows($res) == 0)
echo 'Нету совпадений';
else
echo 'Есть совпадения';


Возможно существуют более правильные запросы.
Хочеться узнать Ваши варианты решения данной проблеммы. Спасибо за помощь.



Спустя 15 минут, 7 секунд (1.11.2010 - 22:56) inpost написал(а):
aH6y
Пишешь в обоих, а ставишь OR. Ошибка =)

Спустя 4 минуты, 7 секунд (1.11.2010 - 23:00) aH6y написал(а):
inpost
Этот код работает. В двух таблицах не могут быть одинаковые значения у поля login. Поэтому и написал OR.

Спустя 23 секунды (1.11.2010 - 23:00) sergeiss написал(а):
SELECT 
(SELECT count(*) FROM `table1` where login='$login') as count1,
(
SELECT count(*) FROM `table2` where login='$login') as count2

И на выходе смотри величины count1 и count2.

Спустя 4 минуты, 25 секунд (1.11.2010 - 23:05) aH6y написал(а):
sergeiss
Как я понимаю твой код может показать в какой таблице есть поле login с значением, так?
Хотелось бы понять структуру. Где об этом можно почитать?

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

Стоит ли оставить моё решение? Иль всё же Ваше более правильное?

Спустя 7 минут, 9 секунд (1.11.2010 - 23:12) sergeiss написал(а):
Можно и по-другому smile.gif
SELECT *  FROM `table1` where login='$login'
union
SELECT
* FROM `table2` where login='$login'

На выходе смотри количество строк. Если ноль - нету ни в одной таблице.

Но!!! Этот запрос сработает только в случае, если у таблиц одинаковая структура. А если у тебя есть 2 таблицы с одинаковой структурой, то у тебя изначально сделана неправильная архитектура БД!!!

Спустя 10 часов, 12 минут, 3 секунды (2.11.2010 - 09:24) linker написал(а):
Не то чтобы одинаковая структура, просто из второго селекта должно выходить столько же колонок по количеству как в первом селекте.

Спустя 1 день, 15 часов, 53 минуты, 47 секунд (4.11.2010 - 01:18) SlavaFr написал(а):
не тестировал, но возможно такой вариант будет работать быстрее, так как второй запрос будет произведен только в случае если первый ни чего не нашел.
SELECT IFNULL( 
IFNULL((SELECT 1 FROM `table1` where login='$login'),
(
SELECT 1 FROM `table2` where login='$login') ),0) AS da

тоесть, если потом $resultat['da']==0, то ненашeл а если 1 то нашел.

с другой стороны такой запрос не очень приятно читать и надо дополнительно задумыватся.

В любом случае надо для скорости зделать индекс на login в обоих таблицах.


_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.
Быстрый ответ:

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