У меня есть база данных MySQL для инвестора, чтобы отслеживать его инвестиции:
Я хочу написать запрос, который позволяет пользователю выбирать все обновления из "обновлений" под определенным классом asset_class. Однако, как уже упоминалось, asset_class находится в таблице инвестиций. Я написал следующий запрос:
SELECT *
FROM updates
WHERE updates.invest_name IN (SELECT deal.deal_name
FROM deal
WHERE deal.asset_class = '$asset_class'
);
Я использую PHP, поэтому $asset_class
- это выбранная переменная asset_class. Однако запрос возвращает только уникальные имена обновлений, но я хочу видеть ВСЕ обновления для данного класса asset_class, даже если несколько обновлений сделаны под одним именем инвестиций. Любой совет? Спасибо!
Ваш запрос должен делать то, что вы намереваетесь. В общем, однако, этот тип запроса будет написан с использованием JOIN
. Более важно использовать заполнитель параметров вместо строк запросов:
SELECT u.*
FROM updates u JOIN
deal d
ON u.invest_name = d.deal_name
WHERE d.asset_class = ?;
Это может использовать индексы по deal(asset_class, deal_name)
и updates(invest_name)
.
?
представляет собой параметр, который вы передаете в запрос при его запуске. Точный синтаксис зависит от того, как вы делаете вызов.