Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   sql запрос (http://mangos.ytdb.ru/showthread.php?t=3574)

lovepsone 25.01.2011 18:14

sql запрос
 
вот у меня 2 таблицы t1 и t2! они одинаковые по структуре но в t1 больше значений, а в t2 меньше! как задать запрос на эти таблицы что б из t1 показывала одинаковые значения t2 и удаляла одинаковые значения из t1, что бы потом я мог соединить эти таблицы в одну t2?

Sid 25.01.2011 18:28

DELETE FROM `t1` WHERE `t1`.`f1` IN (SELECT `f1` FROM `t2`);

А проще

INSERT IGNORE INTO `t1` SELECT * FROM `t2`;

Както так.

YuruY 25.01.2011 18:47

Если в таблицах ключи по всем полям (либо ключей вообще нет), то скорее получите сумму двух таблиц.

lovepsone 25.01.2011 19:06

Добавлено через 5 минут
Цитата:

Сообщение от Sid (Сообщение 18764)
DELETE FROM `t1` WHERE `t1`.`f1` IN (SELECT `f1` FROM `t2`);

не понял я немного выделенное выражение

Цитата:

Сообщение от YuruY (Сообщение 18765)
Если в таблицах ключи по всем полям, то скорее получите сумму двух таблиц.

нет ключи не стоят! смысал в том что t1 таблица устарела но есть инфа которая еще актуальна! получается то что в колонке id значения одинаковые, а вот в остальных колонках разные! просто значений 3000 и в ручную не охота исправлять!

YuruY 26.01.2011 05:36

Цитата:

Сообщение от lovepsone (Сообщение 18766)
Добавлено через 5 минут

не понял я немного выделенное выражение

А так понятней?
Код:

select * from t1 where ID not in (select (ID) from t2);

virusav 26.01.2011 08:33

В любом случае надо расставить ключи и добавить им уникальность.
В этом случае можно использовать INSERT IGNORE INTO.

Для удаления ключи не обязательны, но для более быстрой выборки желательны:
Код:

DELETE `t1` FROM `t1`, `t2` WHERE `t1`.`f1`=`t2`.`f1`;

lovepsone 27.06.2011 06:16

Вот у меня созрел еще вопрос.
Вот с сайта я хочу отправить sql запрос типа:
Персонажу с определенным GUID'ам приходило письмо, в котором лежит вещь (тоже с определенным id'ам )
sql запрос начал писать на таблицу 'mail'. Дошел до колонки mailTemplateId и начал париться. На сколько я понял значения mailTemplateId берутся из mail_loot_template, и тут я застрял. Может кто чем поможет?

Хех.... я забыл что такая вещь существует как WIKI!



ХМ..... почитав вики, я в непонятках. Это ж сколько запросов на базу делать надо то? Может есть вариант по проще?

Sid 27.06.2011 08:06

External Mail patch

lovepsone 27.06.2011 08:23

если есть то можно на него глянуть то хоть??? погуглю.
Патч то я нашел! Может у кого-то есть по свежее патчик чем сдесь https://github.com/xeross/mangos.git?
Хотя нет лучше я сам! Спасибо за подсказку!

Кот ДаWINчи 27.06.2011 09:46

Цитата:

Вот с сайта я хочу отправить sql запрос типа:
Персонажу с определенным GUID'ам приходило письмо, в котором лежит вещь (тоже с определенным id'ам )
а что хочется получить в результате этого запроса?

(а то лопату выдал, направление показал, но как рыть не понятно... ;) )

KiriX 27.06.2011 09:54

Тоже думал о почте через сайт.
Самое сложное для меня оказалось сделать так чтобы, гуиды письма и итема в письме совпадали. Проблему не решал, но если это решить - проблем с отправкой вещей по почте через сайт быть не должно и без всяких патчей.
Кот, надо чтобы при отправке id для таблицы mail и mail_id для таблицы mail_item сразу были одинаковы.

Кот ДаWINчи 27.06.2011 13:19

Цитата:

Тоже думал о почте через сайт.
Таким образом почту с сайта не отправить. Аргументирую: Сервер во время своей работы не проверяет изменения в некоторых таблицах своих баз, сделанные "из вне". Это уже мной проверлось. И почта как раз входит в их число. (Проверял еще на 3.0.9, но с того времени, вроде бы, ничего не изменилось) Письмо "придет" адресату только после перезапуска сервера. Лучше для этого пользоваться SOAP или RA.

а здесь можно предложить только просматривать свои письма через сайт. (кстати, хорошая мысль для АСР рев.29 ;) )

KiriX 27.06.2011 13:31

Ну что только после перезапуска и лучше вообще SOAP - это понятно. Всё равно хотелось бы понять как можно сделать именно так =)

Vladimir 27.06.2011 15:15

если система почты не будет перечитывать таблицы то "так" без предварительной остановки сервера будет кораптить item_instance

KiriX 27.06.2011 16:36

Почему? На каком основании?

rsa 27.06.2011 19:50

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

lovepsone 28.06.2011 00:00

То есть без патча реализовать не реально? Даже если и получится сразу отправить столько запросов то сообщение придет только после перезапуска серва???? Ну что ж, будем думать.
Да и еще вопрос:
Можно ли как-то ВОССТАНОВИТЬ персонажа, после того как его удалили???(на своем аке удалил нечаянно перса,а как восстановить песра не знаю)

KiriX 28.06.2011 00:13

Char.log?
rsa, ага, уловил. Точно, недавно ведь сталкивался с этим сам, когда кой-чего в базе замутить хотел =)

Кот ДаWINчи 28.06.2011 06:24

Цитата:

если система почты не будет перечитывать таблицы то "так" без предварительной остановки сервера будет кораптить item_instance
Это-то понятно, но я пытался сказать немного не об этом. например при UPDATE некоторых полей сервер будет показывать старое значение, а если персонаж был в это время в игре, то после следующего его сохранения (.save) или по выходу, все ваше "сайтовые" изменения могут быть перезаписаны старыми значениями. По крайней мере, с тикитами это происходит (происходило) именно так, с почтой вроде тоже. Хотя, я могу глубоко заблуждаться. :(


Цитата:

очень многие игровые объекты создаются только в памяти сервера при его старте а также в процессе игры, и в базу только выгружаются, но вовсе с ней не синхронизируются.
Вот, вот об этом я и хотел сказать...

Цитата:

То есть без патча реализовать не реально?
РЕАЛИЗОВАТЬ! Через SOAP или RA.

Цитата:

Можно ли как-то ВОССТАНОВИТЬ персонажа, после того как его удалили???(на своем аке удалил нечаянно перса,а как восстановить песра не знаю)
Можно, но это зависит от настроек в mangos.conf ! В конфиге можно включить логирование SQL-дампа при удалении. или сменить способ удаления:

http://wiki.ytdb.ru/index.php/Mangosd.conf

Цитата:

# CharLogDump
# Перед удаление персонажа сбросить сведения о нем в файл лога
# Для восстановления персонажа удалите строки:
# line == START DUMP == to line == END DUMP == и восстановите чара, использую команду logdump
# Стандартно: 0 - не сбрасывать информацию при удалении
# 1 - сбрасывать информацию при удалении
#
Цитата:

# CharDelete.Method
# Метод удаления персонажа
# Стандартно: 0 - Полностью удаляет персонажа из базы данных
# 1 - Убирается привязка персонажей к аккаунтам,
# их имена освобождаются и в игре выглядят как удаленные
#
# CharDelete.KeepDays
# Сколько дней хранить записи об удаленных персонажах перед удалением записей из базы.
# Стандартно: 30
# 0 - Не удалять записи о персонажах и хранить их всегда.
#
и вообще, у хорошего админа должен происходить ежесуточный бакап баз realmd и characters. :)

lovepsone 28.06.2011 14:06

Спасибо за подсказку. Ну что ж погнал я тогда реализовывать!

Vladimir 28.06.2011 14:33

все равно непонятно почему не воспользоваться существующими командами консоли + SOAP

lovepsone 28.06.2011 17:18

я так и собираюсь сделать.
Вот и еще вопрос:
А разве через косоль можно отправить почту с определенным предметом ? Или проще воспользоваться командой additem namechar iditem???? (просто консолью пользовался давным давно и не знаю какие команды существуют в консоли, а те что консоль показывает мне не подходят)

KiriX 28.06.2011 20:05

.send items

lovepsone 06.07.2011 12:09

Надеюсь на вашу помощь:
Код:

$command = 'send items lovepsone "test mail" "test item"  50731';
если вместо 50731 (ид предмета) прописать переменную, типа вот так

Код:

$command = 'send items lovepsone "test mail" "test item"  $iditem';
то мне выдает ошибку типа не правильный синтаксис в гм команде. а если подставляю ид предмета то все норм.
И еще вопрос!
У меня кодировка стоит cp1251, я так понимаю что если имя игрока на Русском языке, то консоль попросит кодировку utf-8, или проблем не будет когда имя в переменной? (данную проблему не знаю как решить, так как если переменную подставить то пишет что не правильный синтаксис в гм команде)

Vipertv 06.07.2011 12:20

Попробуйте так:
Код:

$command = 'send items lovepsone "test mail" "test item" '.$iditem;
Php в одинарных кавычках не заменяет переменную на значение.

lovepsone 06.07.2011 12:48

спасибо! Я даже и не знал что в одинарных кавычках не заменяется переменная на значение

KiriX 06.07.2011 15:10

Цитата:

Сообщение от lovepsone (Сообщение 23891)
спасибо! Я даже и не знал что в одинарных кавычках не заменяется переменная на значение

http://www.en.kolobok.us/smiles/arti...a-facepalm.gif

lovepsone 06.07.2011 16:12

Цитата:

Сообщение от KiriX (Сообщение 23894)

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

KiriX 06.07.2011 23:08

Цитата:

Сообщение от lovepsone (Сообщение 23897)
Я просто кавычкам не придавал значения как, почему, зачем. Когда начал изучать пхп, раздел синтаксиса пропустил, зря конечно.

Действительно зря... Пусть ты уже и явно не ноль в пхп, но я настоятельно рекомендую почитать какой-нить ман для начинающих с самых-самых основ. Сам удивишься, сколько всего ты ещё не знаешь ;)

Shadez 07.07.2011 06:16

К вопросу о SOAP - создание/удаление и прочие операции с лотами на аукционе его средствами возможно?

07.07.2011 08:38

ChatHandler::HandleAuctionItemCommand - можно переделать.

ZzZzZzZ 07.07.2011 12:58

А есть примеры как с SOAP работать?

Sid 07.07.2011 13:03

Я на Qt сделал простенький ремут админ, конектит по RA или SOAP :)

lovepsone 07.07.2011 18:38

Цитата:

Сообщение от KiriX (Сообщение 23904)
Действительно зря... Пусть ты уже и явно не ноль в пхп, но я настоятельно рекомендую почитать какой-нить ман для начинающих с самых-самых основ. Сам удивишься, сколько всего ты ещё не знаешь ;)

Последую вашему совету....

lovepsone 06.10.2011 14:48

Подскажите добрые люди запрос на базу mysql!
К примеру у меня имеется массив a=array(1..10); и b=array(5..15)
в базе содержится 15 строк и одна колонка с название id (в ней содержаться значения от 1 до 15 в соответствующей номеру строки )!

Нужен такой запрос к примеру:
если a<>b то удалить строку колонки id равную значению b,
то есть если b=11 то надо удалить id=11 (11 строку) так как a=11 - не существует,
или если a=3 то надо удалить id=3 (3 строку) так как b=3 - не существует.

Да и еще значения параметра a могут быть к примеру от 1 до 3 и от 7 до 10,
а значения параметра b могут быть к примеру от 3 до 5 и от 9 до 13

06.10.2011 16:20

lovepsone
дайте лучше нормальное описание...то что написано - смахивает на бред
"у меня имеется массив" - где имеется?
DELETE FROM table where id=?

lovepsone 06.10.2011 16:59

массив переменной а и b и вобщем то мне нужно исключить числа которые находятся в базе! к примеру массив a содержит числа от 1 до 15, и массив b содержит числа от 10 до 20! общие у них числа от 10 до 15 !
в базе есть значения допустим от 1 до 30! а мне нужно что-бы скрипт удалял значения в базе от 1 до 10 и от 15 до 30! то есть что бы в базе содержались общее значение массивов a и b (как я писал выше у них общие значения от 10 до 15)
если не понятно:
вот хочу составить запрос типа
(к примеру таблица users в ней 2 колонки id, online )
DELETE FROM `users` WHERE id`='a<>b'
a<>b - a не ровно b
как такой запрос написать ?

Кот ДаWINчи 06.10.2011 17:57

а где хранятся a и b? ;)

lovepsone 06.10.2011 19:26

я просто не знаю как еще вам объяснить какого эффекта я хочу добиться ! я вроде ясно написал что
Цитата:

Сообщение от lovepsone (Сообщение 25410)
к примеру массив a содержит числа от 1 до 15,

к примеру
a[1]=1;
a[2]=2;
...
a[n]=n;
где n числа от 1 до 15!

Кот ДаWINчи 06.10.2011 21:03

т.е. речь идет о массиве скрипта ПХП... Тогда при чем тут запрос в базу Mysql?

Тебе надо писать полноценный скрипт с запросом(запрсами) в базу.

Вот тебя никто понять и не может.


Текущее время: 15:56. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS