Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблицы 3 таблицы accounts, characters, goodboy
Структура таблицы accounts:
|accounts|lastIP|
Структура таблицы characters:
|char_name|online
Структура таблицы goodboy
|id|lastIP|lastactive|
Таблицы accounts и characters я обеденяю
SELECT DISTINCT accounts.login, accounts.lastIP, characters.account_name, characters.char_name, characters.online FROM l2rt.accounts INNER JOIN l2rt.characters ON accounts.login = characters.account_name WHERE characters.online = 1
Теперь мне нужно сравнить получившиеся две таблицы accounts - characters и goodboy так, что бы все значения котрые нету в goodboy-е попали в выборку.
Такая конструкция мне неподходит, потому как у меня непападет в выборку те значения котроые совпадат по lastIP. т.к. при обеденение таблиц он перед ключевое поле goodboy.id.
SELECT DISTINCT accounts.login, accounts.lastIP, characters.account_name, characters.char_name, characters.online, goodboy.lastIP, goodboy.lastactive FROM l2rt.accounts INNER JOIN l2rt.characters ON accounts.login = characters.account_name LEFT OUTER JOIN l2rt.goodboy ON accounts.lastIP = goodboy.lastIP WHERE characters.online = 1 AND goodboy.lastIP IS NOT NULL
3-ий день неполучаеться его осазнать... помогите...
Иными словами
после такого запроса
SELECT DISTINCT accounts.login, accounts.lastIP, characters.account_name, characters.char_name, characters.online FROM l2rt.accounts INNER JOIN l2rt.characters ON accounts.login = characters.account_name WHERE characters.online = 1
у меня вот такие данные:
================================================================ | login | lastIP |account_|char_nam| online |lastIP1 |lastacti| | | | name | e | | | ve | ================================================================ | seb |192.168.| seb | DDDD | 1 | null | | | | 0.5 | | | | | | ---------------------------------------------------------------- | 123 |192.168.| 123 | werewq | 1 | null | | | | 0.1 | | | | | | ---------------------------------------------------------------- | aaaaa |192.168.| aaaaa | sdf | 1 |192.168.|12515490| | | 0.105 | | | | 0.105 | 07 | ----------------------------------------------------------------
а мне нужно что бы строка 3 непопадала сюда... как это сделать?
Отредактированно alexmarch (29.08.2009 15:37:23)
Неактивен
Все что написанно выше можно описать короче:
Вот два случая
есть две таблицы
Вариант1 t1 192.168.0.105 192.168.0.105 192.168.0.104 192.168.0.103 192.168.0.102 192.168.0.101 t2 192.168.0.105 Результат запроса 192.168.0.105 192.168.0.105 192.168.0.104 192.168.0.103 192.168.0.102 192.168.0.101 Вариант2 t1 192.168.0.105 192.168.0.104 192.168.0.103 192.168.0.102 192.168.0.101 t2 192.168.0.105 Результат запроса 192.168.0.104 192.168.0.103 192.168.0.102 192.168.0.101
Как постоить такой запрос???
Неактивен
Я как то некорректно задал вопрос?
Мне сможет кто нибудь здесь помочь?
Неактивен
Вопрос вы задали корректно, только я все равно не понял о чем речь.
Насколько я понимаю вы хотите выбрать из первой таблицы те записи, которых нет во второй, объединяя их по полю lastIP? В этом случае условие в вашем запросе должно иметь вид AND goodboy.lastIP IS NULL, т.е.
Неактивен
Вася благодарю что вы откликнулись. Эта выборка за 4 дня сводит меня уже с ума.
Я попробую объяснить по другому.
Это игровая база. Таблица accounts отвечает за приLogin-нившехся игроков. Там храниться их последний IP адрес, password и его послдение посещение. Таблица characters отвечает за хранения игровых персонажей. Имя, характеристики и т.д. И когда player в игре characters.online = 1. Но так как таблица characters не имеет поля lastIP, но единственным способом узнать IP играющего это объединить characters и accounts по ключевым полям accounts.login = characters.account_name. Таким образом мы узнаем ник играющего, его IP и все его характеристики. в этой части в 100% работает и все здорово.
Есть программа анитибот. И когда игрок ее запускает то анитбот регистрирует клиента в таблице goodboy
Неактивен
Следующий запрос дает вам нужные lastIP из таблицы accounts:
Неактивен
vasya спасибо, огромное но мне он неподходит.
мне как раз нужны characters.char_name
Неактивен
Так проблема была в том, чтобы получить нужные lastIP, а зная их в чем сложность объединить с таблицей characters и выбрать нужные поля.
Неактивен
vasya огромное спасибо.... Дай вам бог здоровья
Неактивен
Блин... он не работает... последний запрос по своей сути такой же как и этот
Неактивен
вот этот запрос работал верно
Неактивен
alexmarch написал:
вот этот запрос работал верно
но только без ников
Вот как раз этот запрос-то и работает неправильно. Он возвращает только одно значение из повторяющихся, а нужны, то все. Правильно будет
Неактивен
Вот второй запрос работает идеально так как мне был нужен. Я бы никогда не смог бы его составить.
Вы мне очень помогли огромное спасибо.
Неактивен
Рано я отписался... к сожалению последний запрос тоже не правильно работает.
Дело в том что мы с начало выбираем записи из accounts и goodboy а это неправельно.
Вот ситуация
в таблице
accounts IP 192.168.0.105 -10 шт.
goodboy 192.168.0.105 - 1 шт.
И если по связке accounts и characters мой хороший игрок в игре то он попадает в выборку.
А это не должно быть .т.к. он числиться в goodboy
Я понимаю что сначало надо выбрать все IP которые online = '1' и только потом их сравнивать с goodboy
как это сделать в одном запросе?
Неактивен
Если я правильно понял вас на этот раз, то вам нужно следующее:
Неактивен
Сделал серию тестов. Вроде все как надо.
Неактивен
Да работает идеально, еще раз спасибо.
Неактивен