1

我有 4 张桌子:

  1. 工作
  2. 标题
  3. 部门

人员表

id | title_id | person | phone | email | dept_id | job_id
---+----------+--------+-------+-------+---------+-------
1  |        1 | some1  | 12345 | s@a.c |       2 |      3
...

其他表结构如下

id | ******** 
---+---------

假设表title有5条记录,表departments有5条记录,表jobs有5条job记录。

假设由 $search string = 6 in table persons 定义的合适记录;

当我执行下面的查询时,结果集有 5 x 5 x 5 x 6 = 750记录,其中大部分是重复的。结果看起来像做排列。

$query = sprintf(
                  "SELECT * 
                   FROM 
                         persons p, titles t, departments d, jobs j 
                   WHERE 
                         p.person LIKE %s OR 
                         p.phone LIKE %s OR 
                         p.email LIKE %s AND 
                         p.id=t.id AND 
                         p.id=j.id AND 
                         p.id=d.id", 
                   $search, $search, $search
                  );

然后我尝试将条件更改如下:

$query = sprintf(
                  "SELECT * 
                   FROM 
                         persons p, titles t, departments d, jobs j 
                   WHERE 
                         p.person LIKE %s OR 
                         p.phone LIKE %s OR 
                         p.email LIKE %s AND 
                         p.title_id=t.id AND 
                         p.job_id=j.id AND 
                         p.dept_id=d.id", 
                   $search, $search, $search
                  );

这将返回相同的结果。我只想立即在结果集中获取标题本身而不是 title_id、工作本身而不是 job_id 和部门名称而不是 dept_id。

我究竟做错了什么?

4

2 回答 2

1

尝试使用join

$query = sprintf(
                  "SELECT * 
                   FROM 
                         persons p join titles t on p.title_id=t.id join departments d on  p.dept_id=d.id join jobs j on p.job_id=j.id
                   WHERE 
                         p.person LIKE %s OR 
                         p.phone LIKE %s OR 
                         p.email LIKE %s
                   ", 
                   $search, $search, $search
                  );

演示

于 2013-04-18T07:18:59.273 回答
-1

将 SELECT * FROM 替换为 SELECT distinct * FROM

于 2013-04-18T07:10:31.620 回答