Добрый день. Есть запрос который обращается к четырем таблицам чтобы получить одну строчку =) Выглядит он так: PHP: SELECT TOP 1 ORE.Наименование as naim FROM database1 AS RF JOIN database2 AS RR ON(RF.Reader = RR.Oid ) JOIN database3 AS RL ON (RL.Oid = RF.Label) JOIN database4 AS ORE ON (ORE.Oid = RL.Asset) WHERE RR.Asset = '4' ORDER BY [Date] DESC То есть в этом запросе используется выбор одной строки ORE.Наименование которая по дате последняя RF.Date DESC Теперь стоит задача выбрать два значения, то есть добавить еще одно условие WHERE. Думал будет просто, сделаю так и заработает: PHP: SELECT TOP 1 ORE.Наименование as naim FROM database1 AS RF JOIN database2 AS RR ON(RF.Reader = RR.Oid ) JOIN database3 AS RL ON (RL.Oid = RF.Label) JOIN database4 AS ORE ON (ORE.Oid = RL.Asset) WHERE RR.Asset = '4' OR RR.Asset = '10' ORDER BY [Date] DESC Но увы, выходит только одна строчка. Сам вопрос как сделать выборку с двумя WHERE RR.Asset? Кстати может кому надо, без JOIN в PHP этот запрос выглядит так: PHP: $this->db->select('Label'); $this->db->select( "(SELECT Наименование as name FROM database4 WHERE [Oid] IN (SELECT [Asset] FROM database3 WHERE [Oid] = Label )) as name"); $this->db->where("[Reader] IN (SELECT [Oid] FROM database2 WHERE [Asset] = '".$getOid."')"); $this->db->limit('1'); $this->db->order_by('Date','DESC'); $query = $this->db->get('database1');
Или так с join в Yii: PHP: $query->select('ORE.Наименование AS name') ->from('database1 AS RF') ->leftjoin('database2 AS RR', 'RF.Reader = RR.Oid') ->leftjoin('database3 AS RL', 'RL.Oid = RF.Label') ->leftjoin('database4 AS ORE', 'ORE.Oid = RL.Asset') ->where(['RR.Asset' => $getOid]) ->orderBy('RF.Date DESC') ->limit(1); return $query->all(); p.s. без join был на CodeIgniter.
@ADSoft На самом деле проблему я решил, не нужно больше тащить два параметра. Но все же на будущее, как можно два WHERE вытащить в такой ситуации?
@Artur_hopf, например, добавить ещё join с подзапросом, получающим максимальное значение даты и конечно-же, убрав top 1 / limit(1).