2010-09-20 3 views
0

Я четыре таблицы:Проблема с запросом

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

и мне нужно, чтобы получить детали характера (раса, класс, имя, пол, онлайн) и информация о команде rmation (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, атм, Guid и те, чьи atm.arenateamid равно at.arenateamid. Insted, он возвращает много случайных членов.

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

+0

.. Как это связано с jquery? –

ответ

1

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

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

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

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

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." 

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

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

+0

отредактирован, надеюсь, что вы получите эту идею сейчас :) – Tom

+0

Надеюсь, я это сделал. Я попытался подробно остановиться выше, пожалуйста, взгляните еще раз. –

+0

и c.guid = at.arenateamcaptainguid что-то не так: команда имеет капитана (at.captainguid) и других членов, я должен получить оба. – Tom

0

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

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

  • справ
  • arena_id?
  • personal_rating
  • matchmaker_rating

see more here for normalization

+0

нет, только руководство направляет его в таблицу arena_team_member, у которой есть arenateamid – Tom

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.

Удачи,

Смежные вопросы