Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将一个表中的用户值查询到列标题并获取标题下的值? 处境_Php_Mysql - Fatal编程技术网

Php 如何将一个表中的用户值查询到列标题并获取标题下的值? 处境

Php 如何将一个表中的用户值查询到列标题并获取标题下的值? 处境,php,mysql,Php,Mysql,我有两张桌子: SGL=单人房(房间内一人) DBL=双人房(房间里有两个人) TPL=三人(三人) 等等。(CHD=房间内的儿童;折扣入住率) clients表包含用户插入的值。tourprices表是客房类型的预设价格 问题: 是否有一种查询方法,可以将用户插入的roomtype与tourprices表的列标题进行比较,以便结果是该列标题下日期的价格 例如:用户希望在2012年2月27日的巡演中预订两个人(DBL)。如何编写查询以根据给定的参数提取200美元的费率 SELECT c.r

我有两张桌子:

  • SGL=单人房(房间内一人)
  • DBL=双人房(房间里有两个人)
  • TPL=三人(三人)
等等。(CHD=房间内的儿童;折扣入住率)

clients表包含用户插入的值。tourprices表是客房类型的预设价格

问题: 是否有一种查询方法,可以将用户插入的roomtype与tourprices表的列标题进行比较,以便结果是该列标题下日期的价格

例如:用户希望在2012年2月27日的巡演中预订两个人(DBL)。如何编写查询以根据给定的参数提取200美元的费率

SELECT c.roomtype, t.SGL, t.DBL, t.TPL, t.QUD, t.CHD
FROM clients c, tourprices t
WHERE c.roomtype = ??????

谢谢

您可以使用
CASE
语句查看
Roomtype
的值,并从
Tourprices
中获取具有该类型的相应列以确定价格

SELECT c.Roomtype
   , CASE
        WHEN c.Roomtype = 'SGL' THEN tp.SGL
        WHEN c.Roomtype = 'DBL' THEN tp.DBL
        WHEN c.Roomtype = 'TPL' THEN tp.TPL
        WHEN c.Roomtype = 'QUD' THEN tp.QUD
        WHEN c.Roomtype = 'CHD' THEN tp.CHD
     END AS RateOfTour
FROM Clients AS c
INNER JOIN Tourprices AS tp ON c.tourstart = tp.tourstartp

您可以使用
CASE
语句查看
Roomtype
的值,并从
Tourprices
中获取具有该类型的相应列以确定价格

SELECT c.Roomtype
   , CASE
        WHEN c.Roomtype = 'SGL' THEN tp.SGL
        WHEN c.Roomtype = 'DBL' THEN tp.DBL
        WHEN c.Roomtype = 'TPL' THEN tp.TPL
        WHEN c.Roomtype = 'QUD' THEN tp.QUD
        WHEN c.Roomtype = 'CHD' THEN tp.CHD
     END AS RateOfTour
FROM Clients AS c
INNER JOIN Tourprices AS tp ON c.tourstart = tp.tourstartp


在程序中而不是在数据库中执行此操作要方便得多。您的注意事项?如果您将依赖类型的信息移动到一个单独的表中,每个日期+房间类型都有不同的行,则可以避免此问题。然后,您可以对Roomtype列执行普通联接。@barmar-实际上,我有过这样的设置,但即使使用了SELECT DISTINCT,非规范化排列也会导致查询出现多个结果。如果您得到多个结果,则可能是数据库结构错误,或者您的WHERE子句中没有所有必要的联接条件。exaclty。例如,Had在表格中重复多次SGL。在这里,只指示一次。Price可能会重复(虽然不太可能),但有一个巡更代码将其区分开来。在程序中而不是在数据库中执行此操作要方便得多。您的注意事项?如果您将依赖类型的信息移动到一个单独的表中,每个日期+房间类型都有不同的行,则可以避免此问题。然后,您可以对Roomtype列执行普通联接。@barmar-实际上,我有过这样的设置,但即使使用了SELECT DISTINCT,非规范化排列也会导致查询出现多个结果。如果您得到多个结果,则可能是数据库结构错误,或者您的WHERE子句中没有所有必要的联接条件。exaclty。例如,Had在表格中重复多次SGL。在这里,只指示一次。价格可能会重复(虽然不太可能),但有一个旅行代码将其区分开来。这个答案应该有效,但您确实应该考虑规范化您的数据库。@Mike,我不确定除了为每种房间类型制作一个单独的表外,如何进一步规范此价格表,但考虑到有26个旅行,每个巡演20多个日期,每个房间类型5个。。。那是2600张表。@mike我正试图按照你的建议修改我的数据库。问题:您建议的“room_types”表的标题下有哪些列标题“SGL,SGL_w_child,DBL,DBL_w_child,…”等等?(试图理解表格的用途)。。。抱歉,正如你可能推断的那样,我是一个完全的初学者,但我正在学习和理解。@shane房间类型可以有两列RoomTypeId和Description。然后你就可以有1='单身',2='有孩子的单身',3='双倍',等等…@亚当,谢谢。你介意我在这个问题上与你进一步合作吗?我想让这个项目运作起来,这样我就可以停止使用MS Excel作为数据库。这个答案应该可行,但是你真的应该考虑规范化你的数据库。@Mike,我不确定除了为每种房间类型制作一个单独的表外,我怎么可能进一步规范这个价格表,但是考虑到有26个旅行团,每个巡演20多个日期,每个房间类型5个。。。那是2600张表。@mike我正试图按照你的建议修改我的数据库。问题:您建议的“room_types”表的标题下有哪些列标题“SGL,SGL_w_child,DBL,DBL_w_child,…”等等?(试图理解表格的用途)。。。抱歉,正如你可能推断的那样,我是一个完全的初学者,但我正在学习和理解。@shane房间类型可以有两列RoomTypeId和Description。然后你就可以有1='单身',2='有孩子的单身',3='双倍',等等…@亚当,谢谢。你介意我在这个问题上与你进一步合作吗?我想让这个项目工作,这样我就可以停止使用MS Excel作为数据库。