Запрос Medoo InnerJoin не работает в базе данных MS SQL - PullRequest
0 голосов
/ 17 января 2020

Я использую MS SQL в качестве базы данных, и Medoo не может успешно выполнять запросы выбора с INNER JOIN.

Это мой запрос.

$configurations = $this->database->select("application_configurations", [
  "[><]environments" => ["active_environment_id", "id"]
  ], [
    "environments.name"
  ], ["application_configurations.application_id" => $id]);

После просмотра Журналы запросов, вот что я обнаружил, выводилось:

'SELECT [environments].[name] FROM [application_configurations] INNER JOIN [environments] USING ([active_environment_id], [id]) WHERE [application_configurations].[application_id] = 1'

MS SQL не нравится это:

""active_environment_id" is not a recognized table hints option."

I написал бы это:

select environments.name from application_configurations
inner join environments on environments.id = application_configurations.active_environment_id
where application_configurations.application_id = 1

Очень простые запросы работают

$configurations = $this->database->select("application_configurations",
  ["active_environment_id"],
  ["application_id" => $id]
);

Как мне заставить это работать с MS SQL?

EDIT

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

Он все еще не работал, этот запрос был сделан за кулисами.

SELECT [environments].[name] FROM [application_configurations]
 LEFT JOIN [environments] USING ([active_environment_id], [id])
 WHERE [application_configurations].[application_id] = 1`

1 Ответ

0 голосов
/ 06 февраля 2020

Это работает, вы просто неправильно поняли инструкции для объединений (что довольно стандартно, учитывая краткость документации по ним).

Вам нужно следующее (для внутреннего объединения):

$database->select('application_configurations',
    [       //  join
        "[><]environments" => ["active_environment_id" => "id"],
    ], [    //  columns
        'environments.name'
    ], [    //  where
        'application_configurations.application_id' => $id
    ]
);

Если вы также часто обращаетесь к этому приложению, вы можете рассмотреть возможность его просмотра на своем сервере. Вызов представления на вашем сервере будет дешевле запроса в любой день.

Надеюсь, это именно то, что вам нужно.

...