我正在做价格表,我想知道是否有办法根据表单中的值匹配多个具有不同值的列...请允许我。
Table: Price
id | name | color | class | year | price
________________________________________
1 | BMW | Red | XML | 2001 | 1200
2 | BMW | Red | XML | 2003 | 1201
3 | BMW | Blue | LXX | 2004 | 1230
4 | VW | Red | LXS | 2001 | 1100
5 | VW | Blue | LXV | 2003 | 1103
基本上我的表看起来像这样,想法是通过匹配四列获得价格值... 如果名称是宝马,颜色是红色,类是xml,年份是2001,那么价格是1200
如何进行查询?...我还没有任何关于此类查询的代码......但我想根据第一个值做一些查询....
SELECT * FROM price
WHERE name = '$user_query' AND (color = 'Red' OR class = 'XML' )
if [...] ... that just wont work...
我不知道如何进行查询...我可以逐个匹配表单中的输入,但我必须进行多次查询...实际上有四个查询...我很乐意简化了我的查询,以便根据用户的请求从列价格中获取该值...
另一件事是从第一个查询中使用 switch case:value ...或者使用 if ,elseif .... r只需 IF < / strong> ...这是因为我知道用户将从表单中选择的值,表单只有4个选择...每个“列”名称,颜色,类和年份一个
你可能认为我希望你为我这样做...好的,不是......是的,因为我想学习如何进行这种类型的查询而不是因为我有这种组合使用IF没有数据base ...我想使用数据库...
if ($name == 'bmw' && $color == 'red' && [...]) {
$price = 1200;
} [...] and so on...
大约23 elseif {} ...
感谢您抽出宝贵时间并分享您对这个想法的看法......
** E D I T **
到目前为止,我有两个很好的答案,而且我正在使用两者,为此我选择正确答案时遇到了一些麻烦...
Mahmoud Gamal和Rajesh Paul
因此,如果有更多的选票,那么我将在几天之内离开它,那就是我要选择的那个......
谢谢。
答案 0 :(得分:0)
您必须更改语法
WHERE name = '$user_query' AND (color = 'Red' OR class = 'XML' )
WHERE name = '$user_query' AND color = 'Red' AND class = 'XML'
答案 1 :(得分:0)
这里需要的是WHERE
子句中的可选参数:
SELECT *
FROM price
WHERE ($ColorPatam IS NULL OR Color = $ColorParam)
AND ($ClassParam IS NULL OR Class = $ClassParam)
...
如果其中一个参数的值为NULL
,则忽略该表达式。
答案 2 :(得分:0)
如果它是关于减少查询长度,那么我建议 -
SELECT * FROM price
WHERE (name, color, class) = ('$user_query', 'Red', 'XML' );
只需对属性集进行分组,而不是使用AND
级联条件,OR
肯定会缩短查询的长度。