Если ваш вопрос не является хорошим (и я подозреваю, что он может быть плохим), вам не нужно утверждение where.Итак,
drop table if exists t1,t2;
create table t1 (id int,val varchar(10));
insert into t1 values
(1,'John' ),
(2,'Pete' ),
(3,'Harry'),
(4,'Joanne');
create table t2(t1id int,dt date);
insert into t2 values
(1 ,'2018-10-19'),
(3 ,'2018-10-19');
SELECT * from t1
LEFT OUTER JOIN t2 ON t1.id = t2.t1id
order by t1.val;
Результат
+------+--------+------+------------+
| id | val | t1id | dt |
+------+--------+------+------------+
| 3 | Harry | 3 | 2018-10-19 |
| 4 | Joanne | NULL | NULL |
| 1 | John | 1 | 2018-10-19 |
| 2 | Pete | NULL | NULL |
+------+--------+------+------------+
4 rows in set (0.00 sec)
Я понятия не имею, как бы вы получили Джона, Пита, Гарри, Джоанна в свой набор результатов, если вы хотите упорядочить по имени.И "& request.querystring (" d ") &" 'не является mysql, что это может быть за php?
Если вас интересует доступность или иным образом на конкретную дату, вы должны сначала перекрестно присоединиться (создаваяспециалисты по картезианскому произведению) на сегодняшний день (ы), например
select t1.id,t1.val,dt
from t1
cross join (select '2018-10-19' dt
#union all select '2018-10-20'
) s;
+------+--------+------------+
| id | val | dt |
+------+--------+------------+
| 1 | John | 2018-10-19 |
| 2 | Pete | 2018-10-19 |
| 3 | Harry | 2018-10-19 |
| 4 | Joanne | 2018-10-19 |
+------+--------+------------+
4 rows in set (0.00 sec)
, а затем посмотрите, существуют ли они в таблице2
select t.id,t.val,t.dt tdt , ifnull(t2.dt,'Not Available') t2dt
from
(select t1.id,t1.val,dt
from t1
cross join (select '2018-10-19' dt
#union all select '2018-10-20'
) s
) t
left join t2
on t.id = t2.t1id and t2.dt = t.dt
order by t.dt,val;
+------+--------+------------+---------------+
| id | val | tdt | t2dt |
+------+--------+------------+---------------+
| 3 | Harry | 2018-10-19 | 2018-10-19 |
| 4 | Joanne | 2018-10-19 | Not Available |
| 1 | John | 2018-10-19 | 2018-10-19 |
| 2 | Pete | 2018-10-19 | Not Available |
+------+--------+------------+---------------+
Обратите внимание, что в перекрестном соединении можно указать любое количество дат:используя союз.Я закомментировал 2018-10-20.
Если у вас большой диапазон дат, объединение может стать громоздким, и создание таблицы календаря / дат в вашей базе данных может быть полезным, и вы должны заменить ее в перекрестном соединении.,например,
select t.id,t.val,t.dt tdt , ifnull(t2.dt,'Not Available') t2dt
from
(select t1.id,t1.val,dt
from t1
cross join (select dte dt from dates where dte between '2018-10-19' and '2018-10-19'
) s
) t
left join t2
on t.id = t2.t1id and t2.dt = t.dt
order by t.dt,val;
Конечно, вы можете изменить условие перекрестного соединения в любом месте.