У меня четыре таблицы:
и мне нужно получить детали персонажа (раса, класс, имя, пол, онлайн) и информацию о команде (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, он возвращает много случайных членов.
Спасибо и извините за мой английский.
Поскольку вы не указываете, как записи в таблицах арены должны присоединяться к записям в таблицах символов, вы получаете кросс-соединение, которое возвращает каждую комбинацию записей символов с записями арены.
Когда вы говорите: "Я хочу, чтобы их всех", что именно вы имеете в виду? Найдите отправную точку для своего запроса. Например: вы ищете всех персонажей, организованных командой, с их деталями и статистикой арены? Или, для каждого персонажа, все команды, на которых они участвуют?
Определение требований немного более четко поможет нам предложить решения.:)
Обновление: Собственно, прочитав запрос немного ближе, я считаю, что могу сделать вывод о том, что вы ищете:
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 проверяется только на таблицу команд.
Не уверен, что это даст вам именно то, что вы хотите, не зная больше о ваших данных и требованиях. Я полагаю, что это даст вам список каждого капитана команды, их статистику арены, а также статистику их команды и членов команды, Надеюсь, это переместит вас вперед. Удачи!
Да, я не совсем уверен, что вы пытаетесь сделать, но на основе описания...
Ваша модель кажется неправильной и никогда не приведет к результатам, которые вы ищете. Например, нет ключей, связывающих 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.
Удача,
uhh mate не уверен, что у вас там,... лениться, чтобы написать запрос для вас, снова взгляните на dev.mysql. com refs должен быть прямой для версии.
также ваша таблица character_arena_stats, не должно быть ссылки на таблицу арены или что-то еще?