我有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。
我做错了什么?
答案 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不同* 来自