2017-05-06 59 views
-1

我有兩個表...問題與LIKE

CREATE TABLE IF NOT EXISTS `clientes` (
    `idcliente` INT(10) NOT NULL AUTO_INCREMENT, 
    `nombre` VARCHAR(50) NOT NULL, 
    `apellido` VARCHAR(50) NOT NULL, 
    `domicilio` VARCHAR(50) NOT NULL, 
    `telefono` VARCHAR(50) DEFAULT NULL, 
    `movil` VARCHAR(50) DEFAULT NULL, 
    `dni` VARCHAR(10) NOT NULL, 
    `familiar` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`idcliente`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS `compras` (
    `idcompra` INT(7) NOT NULL AUTO_INCREMENT, 
    `idcliente` INT(7) NOT NULL, 
    `observacion` text NOT NULL, 
    `fecha_ingreso` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`idcompra`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

在下面的查詢,當名稱爲noneLIKE回報什麼。如何將like添加到CASE WHEN

SELECT compras.idcompra, 
    CASE WHEN clientes.idcliente is null 
      THEN 'none' 
    ELSE CONCAT(clientes.nombre, ',', clientes.apellido) END 
    AS nombre FROM compras 
left join clientes on (compras.idcliente=clientes.idcliente) 
where CONCAT(clientes.nombre, ' ', clientes.apellido) LIKE '%none%' 
order by compras.idcompra asc 

例如,使用後續的查詢......

select compras.idcompra, case when clientes.idcliente is null then 'none' else CONCAT(clientes.nombre, ',', clientes.apellido) end as nombre from compras 
left join clientes on (compras.idcliente=clientes.idcliente) 

時......我得到這些結果...

+----------+--------+ 
| idcompra | nombre | 
+----------+--------+ 
| 1  | none | 
| 2  | none | 
| 3  | none | 
| 4  | juan | 
| 5  | pepe | 
+----------+--------+ 

但是,下面的查詢返回0行。 like不識別none

select compras.idcompra, case when clientes.idcliente is null then 'none' else CONCAT(clientes.nombre, ',', clientes.apellido) end as nombre 
from compras left join clientes on (compras.idcliente=clientes.idcliente) 
where CONCAT(clientes.nombre, ' ', clientes.apellido) LIKE '%none%' 
order by compras.idcompra asc 

我需要退貨!

+----------+--------+ 
| idcompra | nombre | 
+----------+--------+ 
| 1  | none | 
| 2  | none | 
| 3  | none | 
+----------+--------+ 
+0

您的問題不清楚。你只是想從'where'添加'like'條件到'case'?如果不是,他們提供一些樣本數據和預期的輸出 – Utsav

+0

對不起,我不說英語我想輸入搜索值$ _POST [搜索](無),但是當我把'無'它什麼都不返回。 –

+0

您可以提供一些示例數據嗎?而你的預期輸出就是基於此。所以我們可以看到什麼是錯的。 – Utsav

回答

0

以下內容添加到您的查詢:

and '[search term]' != 'none' 
+0

我需要寫'無'($ _post [搜索])來返回記錄¡我需要你返回這個! 1-none 2-none 3-none –

0

更改您的where子句。從返回「無」,這是clientes.idcliente是空的情況下表達,使用相同的條件

SELECT compras.idcompra, 
    CASE WHEN clientes.idcliente is null 
      THEN 'none' 
    ELSE CONCAT(clientes.nombre, ',', clientes.apellido) END AS nombre 
FROM compras 
left join clientes on (compras.idcliente=clientes.idcliente) 
where clientes.idcliente IS NULL 
order by compras.idcompra asc 

另一種方法是形成原始查詢的派生表然後在結果過濾你的案例表達,但我相信這會比上面的建議效率低。

SELECT idcompra, nombre 
FROM (
     SELECT compras.idcompra, 
      CASE WHEN clientes.idcliente is null 
        THEN 'none' 
      ELSE CONCAT(clientes.nombre, ',', clientes.apellido) END AS nombre 
     FROM compras 
     left join clientes on (compras.idcliente=clientes.idcliente) 
     ) D 
WHERE nombre = 'none' 
order by idcompra asc 
+0

我在$ _POST [search]中輸入一個值。如果'$ _POST [search] ='pe''會返回5-pepe。如果是'ju',它將返回4-Juan,如果它是'non',1-none,2-none,3-none。這就是爲什麼我需要使用LIKE'%$ _ POST [搜索]%'。據瞭解
'在哪裏CONCAT(clientes.nombre,'',clientes.apellido)LIKE'%$ _ POST [search]%'' –

+0

您不能在同一個查詢的where子句中使用case表達式的結果。您必須使用「派生表」或使用案例表達式的條件。我建議使用案例表達的條件更簡單。 (* nb。我的醫療反應不正確,我很快就修好了,因爲我誤解了這個問題*) –