Как правильно объединить две таблицы с дополнительными условиями в MySql?

Здравствуйте!

Имеется две таблицы:
PVE и Heroes.
В таблицу PVE добавляются два игрока с айди героями, а в таблице Heroes хранятся характеристики героев.

Цель:
Нужно вывести с таблицы PVE по статусу "ожидание другого игрока" или "сражение началось" и характеристики двух игроков (их здоровье и прочее).

Результат:
Выводится допустим статус: Сражаются(из таблицы PVE), игрок #1(id_heroes 1001) - HP 100, игрок #2(id_heroes 1005) - HP 97(таблици Heroes).
Выводится через WHILE, т.к. сражений много.

Пример как объеденяю две табилцыс двумя игроками:
$db->Query("SELECT tb1.*, tb2.* FROM `PVE` as tb1 
inner join `HEROES` as tb2
on tb1.heroes_id_one = tb2.heroes_id AND 
tb1.heroes_id_one != tb1.heroes_id_two OR 
tb1.heroes_id_two = tb2.heroes_id AND 
tb1.heroes_id_two != tb1.heroes_id_one
WHERE tb1.status != 'end' 
ORDER BY tb1.PVE_id DESC LIMIT 20");


Пример работает, но проблема что он выводит только одного игрока и не знает о втором игроке, а мне нужно чтобы из таблицы HEROES выводились два игрока.

Можно конечно сперва вывести данные из PVE и в цикле потом обращаться к БД и брать информацию.
например:

$db->Query("SELECT * FROM `PVE`
WHERE status != 'end' ORDER BY status DESC LIMIT 20");

while($data_pve = $db->FetchArray()){
 $heroes_id_one = $data_pve["heroes_id_one "];
$heroes_id_two = $data_pve["heroes_id_two "];
$res_one = mysql("SELECT * FROM HEROES WHERE heroes_id = ' $heroes_id_one' LIMIT 1");
$res_two = mysql("SELECT * FROM HEROES WHERE heroes_id = ' $heroes_id_two' LIMIT 1");
... .... .. дальше понятно.
}

Этот пример работает, но хотелось бы найти лучшее решение. Спасибо.
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
0xD34F
@0xD34F
SELECT *
FROM `PVE` p
INNER JOIN `HEROES` h1 ON h1.heroes_id = p.heroes_id_one
INNER JOIN `HEROES` h2 ON h2.heroes_id = p.heroes_id_two
WHERE p.status != 'end'
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы