在父数据库搜索中联接多个子记录

时间:2019-03-04 23:49:17

标签: mysql sql datatables subquery

我有下表:

ClientCompanies。一个Client可以有多个Companies。我目前正在使用服务器端处理在jQuery dataTable中显示Clients的列表。一切正常,但是使用它的人问我是否还可以使用一些公司名称作为搜索条件。

现在,在正常情况下,dataTable会自己搜索字段。但是dataTable在经过数百个条目后会严重减慢速度,因此我不得不使用服务器端处理,因此我必须进行搜索并处理最终结果,dataTable仅负责显示当前批次。

我目前正在对LIKE个表字段中的几个进行Clients比较以进行搜索。

我在想的是,我可能会添加一个属于每个Companies的所有Client的串联列表,并将自定义字段添加到LIKE比较中,甚至可能显示它是客户名称后面的一小部分。

在这种情况下,我该怎么办?我有没有这个主意?或者有更好的方法吗?

我想也许是某种子查询,但它应该只返回一个结果。

更新:数据库结构

客户

  • client_id | INT(11)|非空| AUTO_INCREMENT
  • 名字| VARCHAR(200)|不为空
  • 姓氏| VARCHAR(200)
  • 电子邮件| VARCHAR(200)|不为空
  • 密码|文字
  • 电话| VARCHAR(50)
  • 出生日期|日期
  • registration_date | DATETIME
  • client_type | INT(11)-引用ClientTypes
  • status_id | INT(11)| NOT NULL-引用ClientStatus

公司

  • company_id | INT(11)|非空| AUTO_INCREMENT
  • company_name | VARCHAR(200)|不为空
  • company_name_slug | VARCHAR(200)|不为空
  • created_on | DATETIME |不为空
  • updated_on | DATETIME
  • client_id | INT(11)| NOT NULL-引用Clients

我无法复制确切的CREATE语句,因为实际表还有更多字段和与其他表的关系。我添加了恢复的版本,但想法就在那里。我希望能够做类似的事情:

数据表单元格中的最终结果

客户端Alpha

  • Foo公司
  • 公司栏
  • 欧米茄公司

客户端Beta

  • 欧米茄公司

客户端Gamma

  • Foo公司

如果我搜索“ omega ”,我希望结果包含客户端Alpha和Beta。

1 个答案:

答案 0 :(得分:1)

使用具有JOIN之类的查询:

SELECT Clients.* FROM Clients
JOIN Companies ON Companies.client_id = Clients.client_id
WHERE company_name LIKE '%omega%'

通过适当的SQL注入预防措施并选择所需的字段。