1

こんにちは、私はほとんど問題を抱えていません。データベースに 2 つのテーブルがあります。 ここに画像の説明を入力

ご覧のとおり、すべての従業員を 1 つのタブに表示しています。ここで達成しようとしているのは、関連する従業員のみを特定のタブに表示することです。たとえば、カスタマー サービスの従業員は [販売] タブに表示されません。

$query = mysql_query("SELECT * "."FROM employees, dept_emp "."WHERE employees.emp_no = dept_emp.emp_no");

ご覧いただきありがとうございます:)

4

3 に答える 3

3

基本的にJOIN条件を言い換えているだけなので、WHERE句は役に立ちません。これを試して:

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

結果のページ付けには、次の 2 つの形式の構文が使用されます。

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、複数の「ページ」で同じ行が返される可能性があります。

于 2012-11-29T22:41:49.303 に答える
2

部門を限定しているようには見えません。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'");
于 2012-11-29T22:42:53.027 に答える
0
$dept = ?;
$query = mysql_query("SELECT *
                     FROM employees, dept_emp 
                     WHERE employees.emp_no = dept_emp.emp_no  
                           AND de.dept_no = $dept 
         ");
于 2012-11-29T22:54:39.203 に答える