0

我有两个表,第一个是包含用户详细信息的用户表,第二个是存储了服务 ID 的服务表。

表用户:

 id    Name   mail             gender
-----------------------------------------
  1    John   john@gmail.com   Male 
  2    Mike   mike@gmail.com   Male
  3    Duke   duke@gmail.com   Male  
  4    Queen  queen@gmail.com  Female

餐桌服务:

 id   profile_email   service
 ----------------------------
 1    john@gmail.com    3   
 2    john@gmail.com    4    
 3    mike@gmail.com    3
 4    mike@gmail.com    5   
 5    queen@gmail.com   3
 6    queen@gmail.com   4

表单复选框:

<input type="checkbox" value="1" name="services[]" id="services1"  /> Service 1
<input type="checkbox" value="2" name="services[]" id="services2"  /> Service 2
<input type="checkbox" value="3" name="services[]" id="services3"  /> Service 3
<input type="checkbox" value="4" name="services[]" id="services4"  /> Service 4
<input type="checkbox" value="5" name="services[]" id="services5"  /> Service 5

现在我的问题是如何加入这两个表以显示基于检查服务的过滤记录。

我正在尝试以下查询,但问题是显示重复行。请帮我。非常感谢你提前.m

$select  =  "SELECT a.*,  b.services FROM users a LEFT JOIN services AS b ON b.profile_email = a.mail ";

if(isset($_REQUEST['services']))
{
$services_search = mysql_real_escape_string(implode(', ', $_REQUEST['services']));
$select .= " AND b.services IN ($services_search)";
}
4

2 回答 2

1

我不完全确定您将如何处理这些表,但您不应该将相同的地址存储两次。创建一个新表并在其中只保存电子邮件地址,然后使用外键在表中引用它们。

人员表

id    name   mail_id   gender
-----------------------------------------
 1    John   1         Male 
 2    Mike   2         Male
 3    Duke   3         Male  
 4    Queen  4         Female

不知道这是什么表

id   mail_id         service
----------------------------
1    1               3   
2    1               4    
3    2               3
4    2               5   
5    4               3
6    4               4 

地址表

id    adress
----------------------
1     john@gmail.com
2     mike@gmail.com
3     duke@gmail.com
4     queen@gmail.com

不,您可以在使用其 id 的外键的任何地方加入地址。像这样的东西:

SELECT a.name, a.gender, b.adress
FROM persons as a
INNER JOIN adress as b on a.mail_id = b.id;

http://dev.mysql.com/doc/refman/5.7/en/example-foreign-keys.html

于 2013-09-09T21:11:17.667 回答
0

在查询结束时,您需要对结果进行分组,因为两个表之间存在一对多关系

$select  =  "SELECT a.*,  b.services FROM users a LEFT JOIN services AS b 
ON a.mail  = b.profile_email";

if(isset($_REQUEST['services']))
{
$services_search = mysql_real_escape_string(implode(', ', $_REQUEST['services']));
$select .= " AND b.services IN ($services_search)";
}

$select .= " GROUP BY  a.mail";
于 2013-09-09T20:41:04.333 回答