你好,我有一点问题。我的数据库中有两个表。
如您所见,我将所有员工都放在一个选项卡中,而我在这里想要实现的是仅在给定选项卡中显示相关员工。因此,例如,来自客户服务的员工不会显示在“销售”选项卡中。
$query = mysql_query("SELECT * "."FROM employees, dept_emp "."WHERE employees.emp_no = dept_emp.emp_no");
感谢您的寻找和帮助:)
您的 WHERE 子句是无用的,因为它基本上只是重述 JOIN 条件。试试这个:
SELECT *
FROM employees AS e
INNER JOIN dept_emp AS de ON e.emp_no = de.emp_no
WHERE de.dept_no = '?'
显然,?
将替换为dept_no
您实际尝试过滤的值。
根据您关于查看查询限制/分页的问题,这是通过 SQLLIMIT
子句完成的。该子句可以用几种不同的方式表达。
这首先只返回最大行数:
LIMIT 100 <-- shows first 100 rows from the result set
以下两种形式的语法用于结果的分页:
LIMIT 0, 100 <-- show first 100 rows from the result set (start at 0 offset, and return a max of 100 rows
LIMIT 100, 100 <-- show rows 101-200 from the result set (start at 100 offset and return max of 100 rows)
或者:
LIMIT 100 OFFSET 0 <-- first 100 rows
LIMIT 100 OFFSET 100 <-- rows 101-200
所以把它们放在一起
SELECT *
FROM employees AS e
INNER JOIN dept_emp AS de ON e.emp_no = de.emp_no
WHERE de.dept_no = '?'
ORDER BY e.emp_no
LIMIT 0,100
请注意,我还添加了一个ORDER BY
子句。这对于分页很重要,因为常规的无序SELECT
并不能保证顺序。如果您尝试在没有分页的情况下进行分页,则ORDER BY
可能会在多个“页面”中返回同一行。
看来您并没有限制部门。where 子句需要一个硬限制,您的 where 将始终匹配所有内容。另外,你为什么要连接你的陈述?它不会破裂。就像是:
$query = mysql_query("SELECT * FROM employees JOIN dept_emp ON employees.emp_no = dept_emp.emp_no WHERE dept_emp.dept_no = 'd007'");
$dept = ?;
$query = mysql_query("SELECT *
FROM employees, dept_emp
WHERE employees.emp_no = dept_emp.emp_no
AND de.dept_no = $dept
");