如果满足第一个条件,请选择一行并丢弃以下条件

时间:2013-02-22 05:31:49

标签: mysql sql select

这就是我想要实现的目标:

SELECT  * 
FROM  ventas WHERE (
posicion = 'cc21' 
AND inic < NOW() 
AND fin > NOW()
) ELSE (
WHERE posicion = 'cc21' 
AND fijo = 1)
ELSE ( WHERE posicion = 'cc21' 
AND hits < limite ) 
AND contenido = 'notas' 
LIMIT 1 

我在这个网站上尝试过JOIN和其他例子,但似乎没有指出我对这个特殊情况的正确方向,任何帮助表示赞赏:)

这不起作用

    SELECT 
      TOP (1) * 
    FROM
      ventas 
    WHERE posicion = 'cc21' 
      AND (inic < NOW() AND fin > NOW()) 
      OR (fijo = 1) 
      OR (hits < limite) 
      AND contenido = 'notas' 
    LIMIT 1 

3 个答案:

答案 0 :(得分:1)

您可以使用OR

直接执行此操作
SELECT  * 
FROM    ventas 
WHERE   
        (
            (posicion = 'cc21' AND inic < NOW() AND fin > NOW())
            OR
            (posicion = 'cc21' AND fijo = 1)
            OR
            (posicion = 'cc21' AND hits < limite ) 
        )
        AND 
        contenido = 'notas' 
LIMIT   1 

答案 1 :(得分:0)

您需要使用TOP子句来获取第一行。

至于你的其他查询,我真的很难理解。但是,您需要使用AND和OR运算符来实现此功能。您可以使用括号(括号)对它们进行分组。

SELECT TOP(1)* FROM ventas 位置=&#39; cc21&#39; AND((A和B)或(C)或(D))

希望这会有所帮助。

答案 2 :(得分:0)

最后在潜水并没有找到鱼后我采取了这个:

$cc21 = mysqli_query($not,"SELECT * FROM ventas WHERE posicion = 'cc21'
AND inic < NOW() AND fin > NOW() and contenido = 'notas' LIMIT 1");
if (mysqli_num_rows($cc21) == 0) {
$cc21 = mysqli_query($not,"SELECT * FROM ventas WHERE posicion = 'cc21'
AND fijo = '1' and contenido = 'notas' LIMIT 1");
if (mysqli_num_rows($cc21) == 0) {
$cc21 = mysqli_query($not,"SELECT * FROM ventas WHERE posicion = 'cc21' AND hits < limite AND  contenido = 'notas' LIMIT 1");
}
}

它不干净也不紧凑,但它完成了工作;)

坦克大家为你的无价帮助