2012-01-03 74 views
-2

我试图在我从YouTube视频中学到的mySQL查询中执行此IF语句。我不太确定发生了什么问题。我得到以下的mysql错误:这个mySQL IF语句有什么问题?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(Cuisine != 'Cuisine', WHERE Cuisine='Cuisine') AS ORDER BY restaurantID' at line 2

好吧,对于缺乏细节抱歉。让我再解释一下。

在我的页面上,我有一个HTML表单,其中有3个下拉菜单,用作“过滤器”。其中一个“过滤器”的默认选项是美食,其作为标题,如果没有更改,则意味着用户不希望将美食作为过滤器用于搜索。然而,如果它改变为'西方',那么显然用户想要使用它。

现在,上述问题很容易解决,因为在上述场景中一次只有一个过滤器。但是,当一次使用多个过滤器时,这是对我来说变得复杂的地方,我不知道如何解决这个问题。

我的解决方案是去搜索谷歌在mySQL中的某种IF语句。我看过这段视频(这可能相当不错,但是因为当时我很匆忙,可能会误解它)。这里是视频:http://www.youtube.com/watch?v=3xK5KKQx-J0

我想如果我可以使用这个条件并尝试它的美食,我可以研究和修改它,并在它上面做更多的工作,以使它完全获得过滤系统的工作。

在下面的代码中,我的目标是在SQL中检查一个PHP变量= to,如果它= = Cuisine,那么我不想执行'WHERE Cuisine = $ cuisine'部分查询。 $ cuisine是一个变量,它使用'POST'方法从简单的HTML/AJAX表单下拉菜单中获取。

<?php 
    $result = mysql_query("SELECT * FROM restaurants 
    IF($cuisine != 'Cuisine', WHERE Cuisine='$cuisine') 
    ORDER BY restaurantID 
    ") 
    or die(mysql_error()); 
?> 

P.S我不知道这是否是解决我的问题,正确的方法,但是我现在已经如上所述我的思路和我的问题给你。

我理解你的挫折感时,我没有留下任何细节,再次表示歉意,因为我写了一个写得不好的问题来浪费你的时间,我会记住确保我未来的问题/答案更加详细。

+4

你想完成什么?它看起来像是在混合使用PHP和SQL格式,但不太清楚查询应该做什么。 – JJJ 2012-01-03 11:24:32

+0

你想在那里实现什么? – 2012-01-03 11:24:32

+0

是什么阻止你使用普通的'where'子句? – adarshr 2012-01-03 11:24:37

回答

1

我会将条件从SQL查询移动到PHP,在那里构建正确的查询。

if($cuisine == 'Cuisine')) { 
    $conditions = '1'; // "WHERE 1" matches every record 
} 
else { 
    $conditions = "Cuisine='$cuisine'"; 
} 

$result = mysql_query("SELECT * FROM restaurants 
    WHERE $conditions 
    ORDER BY restaurantID 
") or die(mysql_error()); 

上面假定$cuisine已被正确消毒和转义。

1

你想做什么?如果你想选择的所有行Cuisine列不是“菜”,用WHERE条款:

SELECT * FROM restaurants 
WHERE Cuisine != 'Cuisine' 
ORDER BY restaurantID 
1

没有完全理解你的问题,但如果你想选择所有餐馆给出的美食,责令通过餐厅ID,您可以使用:

$result = mysql_query("SELECT * FROM restaurants WHERE Cuisine = '$cuisine' ORDER BY restaurantID") 
1

我看到多个问题,只有您提供更多信息才能应答。截至目前,在SQL语法错误是, 的IF条件的语法

IF(<condition>, <value if true>, <value if false>) 

这是困扰你(你只有两个参数为你IF)。