Запрос $ wpdb-> get_results возвращает разные (неправильные) результаты по сравнению с phpmyadmin - PullRequest
0 голосов
/ 18 мая 2018

В моей базе данных есть 4 пользовательских таблицы - wp_api_teams, wp_api_matches, wp_api_competitions и wp_api_federations.Они являются частью моей базы данных Wordpress, вот как они выглядят (я использую внешние ключи и все такое):

phpmyadmin schema

Я пытаюсьвывести все команды, которые являются частью федерации.Когда я запускаю это в phpmyadmin, это работает:

SELECT
    wp_api_teams.team_id,
    wp_api_teams.title,
    wp_api_competitions.comp_id,
    wp_api_competitions.title,
    wp_api_federations.federation_id,
    wp_api_federations.title
FROM
    wp_api_teams
JOIN wp_api_matches
    ON wp_api_teams.team_id = wp_api_matches.hometeam_id OR wp_api_teams.team_id = wp_api_matches.awayteam_id
JOIN wp_api_competitions
    ON wp_api_matches.comp_id = wp_api_competitions.comp_id
JOIN wp_api_federations
    ON wp_api_competitions.federation_id = wp_api_federations.federation_id
WHERE wp_api_federations.federation_id = 1
GROUP BY (wp_api_teams.team_id);

Я получаю точные результаты, которые я ищу.

-----------------------------------------------------------------------------------
| team_id | title              | comp_id | title          | federation_id | title |
  1         Arsenal              1         Premier League   1               England
  2         Chelsea              1         Premier League   1               England
  3         Liverpool            1         Premier League   1               England
  4         Manchester United    1         Premier League   1               England
  5         Manchester City      1         Premier League   1               England

Это код, который я использую в Wordpress:

<code>global $wpdb;
$sql = "
SELECT
    wp_api_teams.team_id,
    wp_api_teams.title,
    wp_api_competitions.comp_id,
    wp_api_competitions.title,
    wp_api_federations.federation_id,
    wp_api_federations.title
FROM
    wp_api_teams
JOIN wp_api_matches
    ON wp_api_teams.team_id = wp_api_matches.hometeam_id OR wp_api_teams.team_id = wp_api_matches.awayteam_id
JOIN wp_api_competitions
    ON wp_api_matches.comp_id = wp_api_competitions.comp_id
JOIN wp_api_federations
    ON wp_api_competitions.federation_id = wp_api_federations.federation_id
WHERE wp_api_federations.federation_id = 1
GROUP BY wp_api_teams.team_id
";
$test = $wpdb->get_results($sql);
echo('<pre>');
print_r($test);
echo('
');

и полученный результат пропускает два столбца таблицы:

Array
(
    [0] => stdClass Object
        (
            [team_id] => 1
            [title] => England
            [comp_id] => 1
            [federation_id] => 1
        )
    [1] => stdClass Object
        (
            [team_id] => 2
            [title] => England
            [comp_id] => 1
            [federation_id] => 1
        )

.... и т. Д.

Как вы можете видетьстолбцы wp_api_teams.title и wp_api_competitions.title отсутствуют в результате.

Итак, мои вопросы: почему это происходит, почему эти столбцы опущены, и есть ли что-то, что я могу сделать, чтобы это исправить, потому чтоЯ абсолютно нуждаюсь в них в моем возвращенном результате.Как один и тот же запрос может привести к другому результату в WP и PHPmyadmin.

Это известная ошибка или что-то не так с моим кодом?

Я запускаю 10.2.14-MariaDB на localhost и все настольные движки InnoDB.

1 Ответ

0 голосов
/ 18 мая 2018

Ваши имена столбцов совпадают в вашем наборе результатов.Вам необходимо предоставить псевдоним:

<code>global $wpdb;
$sql = "
SELECT
    wp_api_teams.team_id,
    wp_api_teams.title as team_title,
    wp_api_competitions.comp_id,
    wp_api_competitions.title as competition_title,
    wp_api_federations.federation_id,
    wp_api_federations.title as federation_title
FROM
    wp_api_teams
JOIN wp_api_matches
    ON wp_api_teams.team_id = wp_api_matches.hometeam_id OR wp_api_teams.team_id = wp_api_matches.awayteam_id
JOIN wp_api_competitions
    ON wp_api_matches.comp_id = wp_api_competitions.comp_id
JOIN wp_api_federations
    ON wp_api_competitions.federation_id = wp_api_federations.federation_id
WHERE wp_api_federations.federation_id = 1
GROUP BY wp_api_teams.team_id
";
$test = $wpdb->get_results($sql);
echo('<pre>');
print_r($test);
echo('
');
...