我有4个表:
- <
- 工作/gh>标题
- <
- 部门/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
);
演示strong>
替换SELECT *FROM to SELECT distinct *从