【发布时间】:2018-09-03 20:45:01
【问题描述】:
我已经在这个问题上工作了 3 天,而且眼睛很迷糊。 我有一个 SQL“客户”表,其中包含客户姓名、地址、电子邮件和一个名为“venue”的字段,其中包含他们感兴趣的培训课程地点的逗号分隔的一组“id”。(如:18, 22,35,41)
我有第二张桌子,叫做“场地”,里面有所有课程的场地。 每门课程都是“场地”表中的一个单独的行,带有一个自动递增的 ID。 “客户”表中的场所字段是客户在注册时选择的场所表中“id”行的集合。
一旦客户注册并被传送到“我的兴趣”页面,我想通过输出“venue”表的每个“id”的行数据来显示他们注册感兴趣的课程。在客户表的“customer.venue”字段中。
我希望这是有道理的......
我的客户选择
$sqlc = "Select * from customers ORDER BY id DESC LIMIT 1";
我的场地选择
$venue = $result['venue'];
我当前的“场地”选择代码不起作用
sqlcp = "SELECT * FROM venue WHERE FIND_IN_SET('$venue', id)";
有任何问题请咨询,感谢关注
【问题讨论】:
-
既然你的
$venue是用户感兴趣的课程id列表,分解成数组,循环查询 -
"SELECT * FROM venue WHERE id IN ($venue)" -
为什么不炸掉它们并使用
IN,field called "venue" containing a comma delimited set of "id"'ANDI have a second table called "venue" which holds the venues of all courses. Each course is a separate row -
“一个名为“venue”的字段,其中包含他们感兴趣的培训课程地点的逗号分隔的一组“id”。(例如:18,22,35,41)”。这是一个错误和反模式。为您的数据设置适当的关系结构。这些值应位于子表中的单独行中,并带有返回主客户表的外键。它还将有一个外键返回到场所表,因此总体上将是多对多的关系。那么你的查询就很简单了。
-
另外,您似乎已经将业务场景中的“场地”和“课程”实体合并为数据库设计中的单个表。如果有人想在 2 个场地举办相同的课程,或者在一个场地举办 2 门课程,这将无法解决 - 这要么是不可能的,要么您最终会复制数据。
标签: php mysql select comma delimited