Php MySQL条件左连接
我有两张一对多关系的桌子。地点和宣传。一个地方可以有几个促销活动,在一周中的某一天进行 为了简化,省略了大多数列,如下表: 放置 宣传片 我想建立一个查询,让我得到所有的地方结果,如果可用,让我相应的促销。这是我到目前为止提出的问题:Php MySQL条件左连接,php,mysql,Php,Mysql,我有两张一对多关系的桌子。地点和宣传。一个地方可以有几个促销活动,在一周中的某一天进行 为了简化,省略了大多数列,如下表: 放置 宣传片 我想建立一个查询,让我得到所有的地方结果,如果可用,让我相应的促销。这是我到目前为止提出的问题: SELECT * FROM (SELECT d.nombre, a.dia, a.descripcion FROM directorio as d LEFT JOIN avisos as a ON d.idnum = a.idcliente WHERE palab
SELECT * FROM (SELECT d.nombre, a.dia, a.descripcion FROM directorio as d LEFT JOIN avisos as a ON d.idnum = a.idcliente WHERE palabras LIKE "%Marinera%" LIMIT 15 OFFSET 0) AS t WHERE t.dia = "Sabado" OR t.dia IS NULL;
当dia与本例中的查询Sabado匹配时,或者当dia为空时,当该位置没有促销时,它工作得很好;但问题是,当这个地方确实有促销活动,但没有一个与dia相匹配。。。在这种情况下,我仍然希望在promo列上获得具有空值的记录。如果您希望在dia!=从Sabado开始,您可以在
SELECT *
FROM (
SELECT d.nombre, case when a.dia = "Sabado" then a.dia else NULL END, a.descripcion
FROM directorio as d
LEFT JOIN avisos as a ON d.idnum = a.idcliente
WHERE palabras LIKE "%Marinera%" LIMIT 15 OFFSET 0) AS t
WHERE t.dia = "Sabado"
OR t.dia IS NULL;
使用maxdia删除重复的行
SELECT
idnum
, nombre
, MAX(dia) as dia
, descripcion
FROM (
SELECT
d.idnum
, d.nombre
, case when a.dia = "Domingo" then a.dia else NULL END as dia
, a.descripcion FROM directorio as d
LEFT JOIN avisos as a ON d.idnum = a.idcliente
WHERE palabras LIKE "%Marinera%"
LIMIT 15 OFFSET 0) AS t
WHERE t.dia = "Domingo" OR t.dia IS NULL
您需要一套可用于外部连接的所有DIA。谢谢。它给了我重复的结果,所以我改变了一点:选择idnum,nombre,MAXdia作为dia,从SELECT d.idnum,d.nombre,case当a.dia=Domingo,然后a.dia else NULL END作为dia,a.将董事会的意见描述为d左,在d.idnum=a.idcliente上加入avisos,其中palabras如%Marinera%LIMIT 15偏移0为t,其中t.dia=Domingo或t.dia为NULL@Multitut . 我建议的case用法似乎很有用。。我能认为我的回答能引导你得出正确的结果吗。。如果是这样,请将我的答案也标记为已接受。当然,请相应地修改它。
SELECT *
FROM (
SELECT d.nombre, case when a.dia = "Sabado" then a.dia else NULL END, a.descripcion
FROM directorio as d
LEFT JOIN avisos as a ON d.idnum = a.idcliente
WHERE palabras LIKE "%Marinera%" LIMIT 15 OFFSET 0) AS t
WHERE t.dia = "Sabado"
OR t.dia IS NULL;
SELECT
idnum
, nombre
, MAX(dia) as dia
, descripcion
FROM (
SELECT
d.idnum
, d.nombre
, case when a.dia = "Domingo" then a.dia else NULL END as dia
, a.descripcion FROM directorio as d
LEFT JOIN avisos as a ON d.idnum = a.idcliente
WHERE palabras LIKE "%Marinera%"
LIMIT 15 OFFSET 0) AS t
WHERE t.dia = "Domingo" OR t.dia IS NULL