首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要从mysql帮助编译数组

问需要从mysql帮助编译数组
EN

Stack Overflow用户
提问于 2008-10-22 21:22:43
回答 6查看 226关注 0票数 1

这件事一直困扰着我,我想不通了。我将使用食品类比来尝试简化我的问题。

1000名公众被要求从13种步法中的每一种中挑选一种。然后,这些选择被存储在mysql数据库中,与它们的名称相对应。

代码语言:javascript
复制
e.g.    billy   mary   etc.   etc.

milk....semi. .skimmed...

bread...white...brown....

cheese..edam.....edam....

fruit...apple...orange...

veg....potato...sprout...

meat....beef.....beef....

sweet..bonbons..liquorice..

fish...trout....salmon...

crisp....s&v....plain....

biscuit..hovis..rich tea..

wine.....red.....red.....

beer....stella..carlsburg..

carb....coke.....pepsi....

然后,这1000人中的一人被要求通过复选框选择0到13个选项中的任何一个。

通过搜索数据库,有多少人选择了相同的品种?

在表格中显示它们的所有名称以及它们为所有13个品种选择的内容。

这有意义吗?我希望如此因为这让我抓狂。

EN

回答 6

Stack Overflow用户

发布于 2008-10-22 22:39:00

假设你有一个简单的布局,那么你应该有类似这样的东西(我将我自己限制在其中的三个类别):

代码语言:javascript
复制
PersonId  What_Milk  What_Bread  What_Cheese
       1  Semi       Wheat       Swiss
       2  Skimmed    Rolls       French
       3  Soy        Brown       Smelly
       4  Low Fat    Wheat       Swiss

如果我没理解错的话,你的问题是:

当要求人员4选择0时..3的食物,她可以选择"Bread“和"Cheese”复选框,这意味着查询应该将person 1作为匹配项。对吗?

代码语言:javascript
复制
SELECT
  PersonId,
  What_Milk,
  What_Bread,
  What_Cheese
FROM
  FoodPreference
WHERE
  PersonId != ?
  AND What_Milk   = IFNULL(NULLIF(?, ''), What_Milk)
  AND What_Bread  = IFNULL(NULLIF(?, ''), What_Bread)
  AND What_Cheese = IFNULL(NULLIF(?, ''), What_Cheese)

您的复选框值稍后将位于问号占位符所在的位置。(我已经用IFNULL/NULLIF替换了以前在这里的构造,它具有相同的效果,但对于PHP准备好的语句更友好。)

如果复选框未被选中(因此将值固定为某个值),则将相应的列与其自身进行比较。这意味着它的值不会影响结果。如果其他列匹配,则该行将被选中。

这也意味着,如果用户选择了零个复选框,则将返回所有行。一个人选择的食物越多,匹配的结果就越接近。

在PHP语言中,我建议您使用mysqli_prepare()从查询字符串创建准备好的语句,使用mysqli_stmt_bind_param()将实际值绑定到问号占位符。这比直接构建SQL字符串要安全得多。PHP documentation has a whole lot of info on mysqli,看看吧。

票数 2
EN

Stack Overflow用户

发布于 2008-10-22 22:34:07

部分答案:

排序和concatenating

  • comparing构成一组线性选择,然后变成一个简单的WHERE子句

所以你首先要做一个计算运行,把字符串放到某个字段中,比如字面上的“牛奶|半|脱脂”。

票数 1
EN

Stack Overflow用户

发布于 2008-10-22 23:09:39

代码语言:javascript
复制
SELECT  
    PersonId,  
    milk,  
    bread,  
    cheese
FROM  FoodPreference
WHERE  PersonId != :chosen_person_id  
    AND $milk= CASE WHEN :isset($_POST["milk"]))> '' THEN :isset($_POST["milk"]))   ELSE milk END  
    AND $bread= CASE WHEN :isset($_POST["bread"]))> '' THEN :isset($_POST["bread"]))  ELSE bread END  
    AND $cheese= CASE WHEN :isset($_POST["cheese"]))> '' THEN :isset($_POST["cheese"])) ELSE cheese END

我在正确的轨道上吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/227596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档