Задать вопрос
Ответы пользователя по тегу SQL
  • Как правильно прописать условие при LEFT JOIN с использованием COUNT для COUNT?

    @acspro Автор вопроса
    решено так:
    SELECT r.*, r.`seats`- COUNT(re.`id`) as seatsFree FROM `tours` as r
    		LEFT JOIN `requests` as re ON re.`tour_id`=r.`id` and re.`visible`=1 and re.`status`=3 
    		WHERE 1 
    		group by  r.`id`
    		HAVING  (seatsFree <=90) 
    		ORDER BY r.`finished` DESC
    		LIMIT 0,2

    Но теперь не понятно как посчитать количество выборок
    Нужно что то типа
    SELECT COUNT(r.id) as num, r.`seats`- COUNT(re.`id`) as seatsFree FROM `tours` as r
    		LEFT JOIN `requests` as re ON re.`tour_id`=r.`id` and re.`visible`=1 and re.`status`=3  WHERE 1  group by  r.`id` HAVING  (seatsFree <=90)  order by num desc
    		LIMIT 1

    Но работает косячно.
    Ответ написан
  • Как Выбрать datetime из двух таблиц и сравнить ?

    @acspro Автор вопроса
    На скорую руку решил так - используя php  и кучу запросов наплодив:
    				$lastM=$this->db->squery('SELECT m.*, concat(i.`family`,0x20,i.`name`,0x20,i.`middle`) person FROM `mrequests` m LEFT JOIN `managers` as i ON m.`issued`=i.`id` WHERE m.`visible`=true and m.`status`="issued" and m.`currency`="'.$this->db->filter($k).'" order by m.`issued_dt` desc ');
    				$lastP=$this->db->squery('SELECT p.`currency`, p.`created`, p.`amount`,  concat(m.`family`,0x20,m.`name`,0x20,m.`middle`) person FROM `prequests` p LEFT JOIN `managers` as m ON p.`manager_id`=m.`id` WHERE p.`visible`=true and p.`currency`="'.$this->db->filter($k).'" order by p.`created` and `type`=true desc ');
    
    				if (($lastM)&&($lastP)){
    				$dtM=new datetime($lastM['issued_dt']);
    				$dtP=new datetime($lastP['created']);
    					if ($dtM<$dtP){
    						$currency[$k]['td'].='<td class="text-left">Пользователь '.trim($lastP['person']).' <strong>пополнил кассу на '.$this->ShowMoney($lastP['amount']).' '.$lastP['currency'].'</strong> '.$this->rusdate($dtP->format('Y-m-d')).' г. в '.$dtP->format('H:i:s').'</td>';
    					}else{
    						$currency[$k]['td'].='<td class="text-left">Пользователь '.trim($lastM['person']).' <strong>вычел из кассы '.$this->ShowMoney($lastM['amount']).' '.$lastM['currency'].'</strong> '.$this->rusdate($dtM->format('Y-m-d')).' г. в '.$dtM->format('H:i:s').'</td>';
    					};
    				}elseif($dtM){
    						$currency[$k]['td'].='<td class="text-left">Пользователь '.trim($lastM['person']).' <strong>вычел из кассы '.$this->ShowMoney($lastM['amount']).' '.$lastM['currency'].'</strong> '.$this->rusdate($dtM->format('Y-m-d')).' г. в '.$dtM->format('H:i:s').'</td>';
    					}elseif($dtP){
    						$currency[$k]['td'].='<td class="text-left">Пользователь '.trim($lastP['person']).' <strong>пополнил кассу на '.$this->ShowMoney($lastP['amount']).' '.$lastP['currency'].'</strong> '.$this->rusdate($dtP->format('Y-m-d')).' г. в '.$dtP->format('H:i:s').'</td>';
    					}else $currency[$k]['td'].='<td class="text-left"></td>';
    Ответ написан
    Комментировать