Задача: проверить существует ли поле 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. Ошибка =)
Пишешь в обоих, а ставишь OR. Ошибка =)
Спустя 4 минуты, 7 секунд (1.11.2010 - 23:00) aH6y написал(а):
inpost
Этот код работает. В двух таблицах не могут быть одинаковые значения у поля login. Поэтому и написал OR.
Этот код работает. В двух таблицах не могут быть одинаковые значения у поля 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 с значением, так?
Хотелось бы понять структуру. Где об этом можно почитать?
В данной ситуации мне необходимо только проверить на наличие значения в поле. Мне абсолютно всё равно в какой таблице находиться значение.
Стоит ли оставить моё решение? Иль всё же Ваше более правильное?
Как я понимаю твой код может показать в какой таблице есть поле login с значением, так?
Хотелось бы понять структуру. Где об этом можно почитать?
В данной ситуации мне необходимо только проверить на наличие значения в поле. Мне абсолютно всё равно в какой таблице находиться значение.
Стоит ли оставить моё решение? Иль всё же Ваше более правильное?
Спустя 7 минут, 9 секунд (1.11.2010 - 23:12) sergeiss написал(а):
Можно и по-другому 
На выходе смотри количество строк. Если ноль - нету ни в одной таблице.
Но!!! Этот запрос сработает только в случае, если у таблиц одинаковая структура. А если у тебя есть 2 таблицы с одинаковой структурой, то у тебя изначально сделана неправильная архитектура БД!!!

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 написал(а):
не тестировал, но возможно такой вариант будет работать быстрее, так как второй запрос будет произведен только в случае если первый ни чего не нашел.
тоесть, если потом $resultat['da']==0, то ненашeл а если 1 то нашел.
с другой стороны такой запрос не очень приятно читать и надо дополнительно задумыватся.
В любом случае надо для скорости зделать индекс на login в обоих таблицах.
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 в обоих таблицах.
_____________
Процесс написания своего велосипеда повышает профессиональный уровень программиста.