SW 13 проблемы с переделкой MySql запросов

  • Автор темы Автор темы Fantik
  • Дата начала Дата начала

Fantik

Пляшущий с бубном
Участник
Сообщения
27
Розыгрыши
0
Репутация
39
Реакции
107
Баллы
278
Хроники
  1. Chaotic Throne: High Five
Сборка
other
Парни всем привет, нужна помощь.
Занимаюсь сейчас переделкой mysql запросов в шаблоне SW13, так как они не соответсвуют.

Есть проблема

SQL:
        SELECT characters.char_name, characters.level, characters.sex, characters.pvpkills, characters.pkkills, characters.online, characters.onlinetime, char_templates.ClassName, clan_data.clan_name, clan_data.clan_id
        FROM `characters`
        LEFT JOIN `char_templates` ON characters.classid = char_templates.ClassId
        LEFT JOIN `clan_data` ON characters.clanid = clan_data.clan_id
        WHERE characters.accesslevel='0'
        ORDER BY characters.{order} DESC
        LIMIT {limit}",

1 Момент.
Правильно ли я понимаю это код
SQL:
 LEFT JOIN `clan_data` ON characters.clanid = clan_data.clan_id
Подсоединяемся к таблице `clan_data` , берём значение этой колонки clan_id и записываем его в колонку clanid таблици characters ?

2 Момент.
Проблема в том, что значение которое мне надо записать (а может я всё неправильно понял и получить а не записать?) в таблицу characters находится в другой таблице, character_subclasses.

И собственно я не могу понять как мне корректно составить код
Ох...
 

Уточню.
Тоесть данные колонки clanid, таблици characters ( characters.clanid ) по факту тут - character_subclasses.clanid
а колонки clanid в таблице characters несуществует
Надо переделать запрос
 
SQL:
SELECT characters.char_name, characters.level, characters.sex, characters.pvpkills, characters.pkkills, characters.online, characters.onlinetime, char_templates.ClassName, clan_data.clan_name, clan_data.clan_id
        FROM `characters`
        LEFT JOIN `char_templates` ON characters.classid = char_templates.ClassId
        LEFT JOIN `clan_data` ON character_subclasses.clanid = clan_data.clan_id
        WHERE characters.accesslevel='0'
        ORDER BY characters.{order} DESC
        LIMIT {limit}",
 
SQL:
SELECT characters.char_name, characters.level, characters.sex, characters.pvpkills, characters.pkkills, characters.online, characters.onlinetime, char_templates.ClassName, clan_data.clan_name, clan_data.clan_id
        FROM `characters`
        LEFT JOIN `char_templates` ON characters.classid = char_templates.ClassId
        LEFT JOIN `clan_data` ON character_subclasses.clanid = clan_data.clan_id
        WHERE characters.accesslevel='0'
        ORDER BY characters.{order} DESC
        LIMIT {limit}",
Работать не будет.
Таблица character_subclasses не джоинтся)

Правильно ли я понимаю это код
Нет, не правильно.
sql не берет не какие данные, оно соединяет строки.



Вот примерно так.
Где нужно подставить правильно колонки.
SQL:
SELECT characters.char_name, characters.level, characters.sex, characters.pvpkills, characters.pkkills, characters.online, characters.onlinetime, char_templates.ClassName, clan_data.clan_name, clan_data.clan_id
        FROM `characters`
        LEFT JOIN character_subclasses ON character_subclasses.[B]obj_id[/B] = characters.[B]char_id [/B]
        LEFT JOIN `char_templates` ON characters.classid = char_templates.ClassId
        LEFT JOIN `clan_data` ON character_subclasses.[B]clanid [/B]= clan_data.clan_id
        WHERE characters.accesslevel='0'
        ORDER BY characters.{order} DESC
        LIMIT {limit}

obj_id = колонка с айди чара в таблице character_subclasses
Но тут нужно аккуртно, таблица называется как множественное число, и там может быть несколько запесей для одного персонажа.

char_id - колонка с айди персонажа в таблице characters

clanid - колонка с ади клана.
 

    Fantik

    Баллов: 1
    Человек толково всё объяснил и помог решить проблему. Спасибо ему большое за это
Работать не будет.
Таблица character_subclasses не джоинтся)
Так точно, пробовал - не работает.

Нет, не правильно.
sql не берет не какие данные, оно соединяет строки.
Понял, спасибо.

Вот примерно так.
Где нужно подставить правильно колонки.
SQL:
SELECT characters.char_name, characters.level, characters.sex, characters.pvpkills, characters.pkkills, characters.online, characters.onlinetime, char_templates.ClassName, clan_data.clan_name, clan_data.clan_id
FROM `characters`
LEFT JOIN character_subclasses ON character_subclasses.[B]obj_id[/B] = characters.[B]char_id [/B]
LEFT JOIN `char_templates` ON characters.classid = char_templates.ClassId
LEFT JOIN `clan_data` ON character_subclasses.[B]clanid [/B]= clan_data.clan_id
WHERE characters.accesslevel='0'
ORDER BY characters.{order} DESC
LIMIT {limit}
obj_id = колонка с айди чара в таблице character_subclasses
Но тут нужно аккуртно, таблица называется как множественное число, и там может быть несколько запесей для одного персонажа.

char_id - колонка с айди персонажа в таблице characters

clanid - колонка с ади клана.
Спасибо! Заработало! Но при условии удаления строки ORDER BY characters.{order} DESC - идёт отсылка к другому запросу, который некорректен и тоже его надо править как я понял. Буду пробовать по вашему примеру. С меня + и большое спасибки
 
@Desquire,
Подскажите еще пожалуйста. очень сложный запрос попался, я частично понял но дальше - невыходит
Оригинальный код без каких либо изменений
SQL:
SELECT characters.account_name, characters.char_name, characters.level, characters.maxHp, characters.maxCp, characters.maxMp, characters.sex, characters.exp, characters.sp, characters.pvpkills, characters.pkkills, characters.karma, characters.race, characters.base_class, characters.accesslevel, characters.lastAccess, char_templates.ClassName, char_templates.STR, char_templates.CON, char_templates.DEX, char_templates._INT, char_templates.WIT, char_templates.MEN
        FROM `characters`
        LEFT JOIN `char_templates` ON characters.base_class = char_templates.ClassId
        WHERE characters.charId='{charID}'",

По факту колонок
(ниже - таблица.колонка) Тут корректное местонахождение параметров (таблица колонка)
characters.maxHp character_subclasses.maxHp
characters.maxCp character_subclasses.maxCp
characters.maxMp character_subclasses.maxMp
characters.exp character_subclasses.exp
characters.sp character_subclasses..sp
characters.base_class characters.base_class.isBase

Не существует а находятся эти параметны опять же в таблице character_subclasses

И тут я в потерях....
Из запроса SELECT данные characters.maxHp, characters.maxCp, characters.maxMp, characters.exp, characters.exp, characters.sp, characters.base_class надо, удалить, веть таких колонок не существует? Менять на корректные данные смысла нету как я понимаю.

Теперь за взять корректные строки ( таблица.колонка и присвоить им джоин по вашему примеру?

То есть примерно должно что то выйти в духе

SQL:
SELECT characters.account_name, characters.char_name, characters.level, , characters.sex,  characters.pvpkills, characters.pkkills, characters.karma, characters.race,  characters.accesslevel, characters.lastAccess, char_templates.ClassName, char_templates.STR, char_templates.CON, char_templates.DEX, char_templates._INT, char_templates.WIT, char_templates.MEN
        FROM `characters`
LEFT JOIN
LEFT JOIN
LEFT JOIN
LEFT JOIN
LEFT JOIN character_subclasses ON character_subclasses.char_obj_id = characters.obj_Id
LEFT JOIN `char_templates` ON characters.base_class.isBase = char_templates.ClassId
        WHERE characters.charId='{charID}'",

Последнее я вывел благодаля вашему примеру и то не факт, что правильно.
Но теперь я в потерях. Я реально пытаюсь понять. Голова кипит

Можно на примере переделки characters.maxHp в ===>>>>character_subclasses.maxHp
А дальше уж я сам как то(
 
У тебя в select список полей.

где формат ТАБЛИЦА (ТОЧКА) КОЛОНКА

Тебе нужно 1 раз сделать джоин таблицы character_subclasses по правилам.
И дальше уже в селекте использовать просто колонки из этой таблицы.

Если ты посмотришь, то в сообщении что я писал выше, то я делал второй джоин уже по колонки из character_subclasses таблицы.
 

Похожие темы

Назад
Сверху Снизу