正在排列我的查询结果集,有问题


Permutating Result Set of My Query, Something is wrong

我有4个表:

  1. <
  2. 工作/gh>标题
  3. <
  4. 部门/gh>

人表

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条工作记录。

我们说合适的记录定义为$search string = 6在表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本身而不是title_id, job本身而不是job_id部门名称而不是dept_id。

我做错了什么?

尝试使用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
                  );

替换SELECT *FROM to SELECT distinct *从