【问题标题】:JOIN query problems with 2 tables2个表的JOIN查询问题
【发布时间】:2015-04-30 21:38:34
【问题描述】:

首先,我什至不知道该查询是如何被调用的,但我敢打赌它存在。

我有一张表格,上面有活动,以及代表(修复)人员的数字,他们将参加该活动。好的,然后我得到了一个用户表,这些人在哪里,以及来自事件的 id-s。所以事件单元格看起来像“1,5,22,47”,即人员 ID。

问题是,我应该如何用每个人的名字来呼应这个事件? :O 类似的:

“活动:与爱德华、西蒙斯博士、沃克夫人一起进行班级旅行”

没有 315345345 个查询...

表格示例:

事件:

  • 身份证、姓名、日期、人员

用户:

  • 身份证、姓名

很喜欢:事件:

  • “1”、“班级旅行”、“5月2日”、“1,2,5,6”
  • “2”、“参观博物馆”、“5 月 14 日”、“5,6,8,1”

用户:

  • “1”,“爱德华”
  • “2”,“西蒙斯博士”

【问题讨论】:

  • 你能从每个表中给出几个示例行吗?
  • 你可以改变结构吗?

标签: php mysql


【解决方案1】:

创建第三个表 UsersEvents(或类似的东西):

  • event_id
  • user_id,

然后添加行:

  • 1, 1
  • 1, 2
  • 1、5
  • 1、6

  • 2、5
  • 2、6
  • 2、8
  • 2, 1

【讨论】:

    【解决方案2】:

    我不建议将活动和与会者列表之间的关系存储到单个列中。这是非常糟糕的做法。

    相反,我会使用第三张表来映射活动和参与者之间的关系。换句话说,使用外键创建一对多关系(主-详细信息、父-子)。

    Check out this post for more information regarding database design patterns.

    使用一对多表,您可以编写一个简单的 SQL 查询来获取您想要的数据。比如:

    SELECT Attendee FROM Event_Attendees WHERE Event LIKE $eventName
    

    这将返回特定活动的所有参与者的数组。当然,您可能希望使用 mysqli 或 PDO 使用准备好的语句。

    这个Event_Attendees 表基本上有两个主要列来建立关系:EventAttendee。我一般使用自增整数作为主键索引。

    【讨论】:

    • 是的,它确实是这样工作的,我不知道为什么我没有想到...可能我试图节省太多空间:)
    【解决方案3】:

    你需要为每一行创建一个函数,将所有名称连接成一个字符串,然后像这样执行

    从事件中选择 EventId、EventName、udf_getPeople(EventId)

    udf_getPeople 内部

    声明@everyone varchar(max);

    创建一个游标来获取与EventId顺序相关的人

    获取每一行

    将人员字段连接到@everyone

    遇到最后一个人时关闭光标

    返回所有人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多