Проблема с запросом

0

У меня четыре таблицы:

  • символов
    • справ
    • имя
    • пол
    • класса
    • расы
    • онлайн
  • character_arena_stats
    • справ
    • personal_rating
    • matchmaker_rating
  • arena_team_member
    • arenateamid
    • played_season
    • played_week
    • wons_season
    • wons_week
  • arena_team
    • arenateamid
    • captain_guid

и мне нужно получить детали персонажа (раса, класс, имя, пол, онлайн) и информацию о команде (personal_rating, matchmaker_rating, play_season, play_week, wons_season, wons_week, captain_guid), но не могут заставить ее работать. Мой запрос:

$result=mysql_query("SELECT 
            c.guid,
            c.name,
            c.gender,
            c.class,
            c.online,
            c.race,
            atm.guid,
            atm.played_season,
            atm.played_week,
            atm.wons_season,
            atm.wons_week,
            atm.arenateamid,
            cas.personal_rating,
            cas.guid,
            cas.matchmaker_rating,
            at.arenateamid,
            at.captainguid
         FROM
         character_arena_stats cas,
         arena_team_member atm,
         characters c,
         arena_team at
         WHERE c.guid = cas.guid AND atm.arenateamid = ".$entry." AND at.arenateamid = ".$entry."");

Он должен возвращать только члены, чей указатель равен c.guid, cas.guid, atm, guid и тем, чей atm.arenateamid равен at.arenateamid. Insted, он возвращает много случайных членов.

Спасибо и извините за мой английский.

  • 0
    .. Как это связано с jquery?
Теги:

3 ответа

1
Лучший ответ

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

Когда вы говорите: "Я хочу, чтобы их всех", что именно вы имеете в виду? Найдите отправную точку для своего запроса. Например: вы ищете всех персонажей, организованных командой, с их деталями и статистикой арены? Или, для каждого персонажа, все команды, на которых они участвуют?

Определение требований немного более четко поможет нам предложить решения.:)

Обновление: Собственно, прочитав запрос немного ближе, я считаю, что могу сделать вывод о том, что вы ищете:

SELECT 
            c.guid,
            c.name,
            c.gender,
            c.class,
            c.online,
            c.race,
            atm.guid
            atm.played_season,
            atm.played_week,
            atm.wons_season,
            atm.wons_week,
            atm.arenateamid,
            cas.personal_rating,
            cas.guid,
            cas.matchmaker_rating,
            at.arenateamid,
            at.captainguid
         FROM
         character_arena_stats cas,
         arena_team_member atm,
         characters c,
         arena_team at
         WHERE c.guid = cas.guid 
         and c.guid = atm.guid
         and atm.arenateamid = at.arenateamid
         AND at.arenateamid = ".$entry."

Обратите внимание, что таблицы Arena Team и Character теперь объединены на основе GUID капитана команды - это позволит избежать проблемы с перекрестным соединением ( "случайные строки" ). Кроме того, члены команды Arena Team теперь присоединяются к Arena Teams, а параметр filter проверяется только на таблицу команд.

Не уверен, что это даст вам именно то, что вы хотите, не зная больше о ваших данных и требованиях. Я полагаю, что это даст вам список каждого капитана команды, их статистику арены, а также статистику их команды и членов команды, Надеюсь, это переместит вас вперед. Удачи!

  • 0
    отредактировано, надеюсь, вы поняли идею сейчас :)
  • 0
    Надеюсь, я сделал. Я попытался уточнить выше, пожалуйста, посмотрите еще раз.
Показать ещё 4 комментария
0

Да, я не совсем уверен, что вы пытаетесь сделать, но на основе описания...

Ваша модель кажется неправильной и никогда не приведет к результатам, которые вы ищете. Например, нет ключей, связывающих arena_team и arena_team_member с символами и character_arena_stats.

Во-вторых, это условие:

"WHERE c.guid = cas.guid AND atm.arenateamid = ".$entry." AND at.arenateamid = ".$entry);

неверно для этого утверждения: "Он должен возвращать только члены... , чья atm.arenateamid равна at.arenateamid".

Скорее, его можно было бы переписать следующим образом:

"WHERE c.guid = cas.guid AND atm.arenateamid = at.arenateamid AND atm.arenateamid = ".$entry);

Несмотря на это, из-за вышеупомянутых причин запрос никогда не вернет ожидаемые результаты, по крайней мере, исходя из того, что я понял из вашего сообщения.

SIDE ПРИМЕЧАНИЕ: Это PHP-код, поэтому я не знаю, почему вы помечаете его как jQuery.

Удача,

0

uhh mate не уверен, что у вас там,... лениться, чтобы написать запрос для вас, снова взгляните на dev.mysql. com refs должен быть прямой для версии.

также ваша таблица character_arena_stats, не должно быть ссылки на таблицу арены или что-то еще?

  • guid
  • arena_id?
  • personal_rating
  • matchmaker_rating

подробнее см. нормализацию

  • 0
    нет, только guid ссылается на таблицу arena_team_member, в которой есть arenateamid

Ещё вопросы

Сообщество Overcoder
Наверх
Меню