Есть ли способ получить записи MySQL, используя разные псевдонимы ID - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь получить записи, используя разные псевдонимы, но они связаны между собой.

Я использую сервер WAMP. Я успешно подключил свой проект / скрипт к базе данных PhpMyAdmin, и некоторые записи можно увидеть в моем PHP-файле, используя некоторые запросы, и они будут успешно вставлены.

Однако, когда я пытаюсь извлечь записи, используя разные псевдонимы, я получаю сообщение об ошибке: "MySQL сказал: # 1066 - Неуникальная таблица / псевдоним: 'команды" "?

Не могли бы вы объяснить, что происходит, потому что в базе данных, когда я проверяю идентификаторы этих записей, они показывают, что они подключены / извлекают запись из другой таблицы.

Ниже приведен мой запрос MySQL, в котором я несколько раз пытался изменить, но после каждой попытки ничего не получалось:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date,
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams ON fixtures.home_teamID = teams.team_id 
    JOIN teams ON fixtures.away_teamID = teams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC

В сообщении об ошибке из запроса говорится, что:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date, 
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams ON fixtures.home_teamID = teams.team_id 
    JOIN teams ON fixtures.away_teamID = teams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC 
LIMIT 0, 25

Пожалуйста, объясните мне, что я делаю не так, и обратите внимание, что я новичок в этой платформе, использующей PHP и MySQL. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Если вы хотите объединить две таблицы в одну и ту же таблицу, вам нужен псевдоним

  SELECT DISTINCT fixtures.fixture_id
        , fixtures.fixture_date
        , fixtures.fixture_time
        , fixtures.home_teamID
        , fixtures.away_teamID
        , fixtures.comp_id 
        , a.team_name home_team
        , b.team_name  away_team
  From fixtures 
      JOIN teams  a ON fixtures.home_teamID = a.team_id 
      JOIN teams  b ON fixtures.away_teamID = b.team_id 
      JOIN competitions ON fixtures.comp_id = competitions.comp_id 
  ORDER BY fixture.id ASC

в этом примере a и b - псевдоним для той же таблицы, используемой в двух направлениях: один для home_team и один для way_team

и для более компактного кода, предложенного @Tim Biegeleisen, вы можете использовать псевдоним как

  SELECT DISTINCT f.fixture_id
        , f.fixture_date
        , f.fixture_time
        , f.home_teamID
        , f.away_teamID
        , f.comp_id 
        , a.team_name home_team
        , b.team_name  away_team
  From fixtures f 
      JOIN teams  a ON f.home_teamID = a.team_id 
      JOIN teams  b ON f.away_teamID = b.team_id 
      JOIN competitions c  ON f.comp_id = c.comp_id 
  ORDER BY f.id ASC
0 голосов
/ 30 сентября 2019

Вы присоединяетесь к «командам» два раза, поэтому, когда вы ссылаетесь на «команды», она не знает, имеете ли вы в виду первые команды, которые были присоединены по home_teamID, или вторую группу, которая была присоединена по адресу away_teamID.

Вы исправляете это, присваивая каждому соединению другое имя, например:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date,
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams AS hometeams ON fixtures.home_teamID = hometeams.team_id 
    JOIN teams AS awayteams ON fixtures.away_teamID = awayteams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC
...