我的查询的置换结果集,出了点问题

时间:2013-04-18 07:02:51

标签: php mysql

我有4张桌子:

  1. 工作
  2. 标题
  3. 部门
  4. 人员表

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

    其他表格的结构与以下内容相同

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

    假设表标题中有5条记录,表部门中有5条记录,表作业中有5条作业记录。

    让我们说在表格中由$ search string = 6定义的合适记录;

    当我执行下面的查询时,结果集有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和department的名称,而不是结果集中的dept_id。

    我做错了什么?

2 个答案:

答案 0 :(得分: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
                  );

<强> DEMO

答案 1 :(得分:-1)

替换SELECT *                    从FROM到SELECT不同*                    来自