2012-11-29 3 views
1

Bonjour, j'ai un petit problème. J'ai deux tables dans ma base de données. Comme vous pouvez le voir, je reçois tous les employés dans un onglet, et ce que j'essaie de réaliser ici est d'afficher uniquement les employés concernés dans un onglet donné. Ainsi, les employés des services client ne seront pas affichés dans l'onglet Ventes par exemple.MySQL Query (base de données) - essayer d'afficher seulement certaines valeurs

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

Merci pour regarder et aider :)

Répondre

3

Votre clause WHERE est inutile car il est juste redressera une condition join essentiellement. Essayez ceci:

SELECT * 
FROM employees AS e 
INNER JOIN dept_emp AS de ON e.emp_no = de.emp_no 
WHERE de.dept_no = '?' 

Il est évident que la ? serait remplacée par la valeur dept_no vous en train d'essayer de filtrer.

Par votre question sur la restriction des requêtes/pagination, cela se fait via la clause SQL LIMIT. La clause peut être exprimée de différentes manières.

Ce premier juste renvoie un nombre maximum de lignes:

LIMIT 100 <-- shows first 100 rows from the result set 

Les deux formes de syntaxe sont utilisées pour la pagination des résultats suivants:

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) 

Ou:

LIMIT 100 OFFSET 0 <-- first 100 rows 
LIMIT 100 OFFSET 100 <-- rows 101-200 

Donc, tout mettre ensemble

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 

Notez que j'ai également ajouté une clause ORDER BY. Ceci est important pour la pagination en ce sens qu'un SELECT non ordonné ne garantit pas l'ordre. Si vous essayez de paginer sans ORDER BY, vous pourriez potentiellement obtenir la même ligne retournée dans plusieurs "pages".

+0

Merci de l'aide ici, si vous pouviez me dire comment limiter le nombre de résultats permet de dire à 100, et reste sera affiché sur les pages suivantes. Raison pourquoi je pose cette question parce que j'ai une base de données avec presque 300k entrées, alors quand je vais essayer de charger un seul département avec plus de quelques k personnes, il ne fera pas de bien. –

+0

@MaciejCygan La pagination se fait via l'utilisation de la clause 'LIMIT'. S'il vous plaît voir ma réponse mise à jour pour plus d'informations. –

2

Il ne semble pas que vous limitiez les départements. La clause where a besoin d'une limite stricte, votre where correspondra toujours à tout. Aussi, pourquoi concaténéz-vous votre déclaration? Ça ne casse pas. Quelque chose comme:

$query = mysql_query("SELECT * FROM employees JOIN dept_emp ON employees.emp_no = dept_emp.emp_no WHERE dept_emp.dept_no = 'd007'"); 
+0

Merci ce travailleur parfaitement :) –

0
$dept = ?; 
$query = mysql_query("SELECT * 
        FROM employees, dept_emp 
        WHERE employees.emp_no = dept_emp.emp_no 
          AND de.dept_no = $dept 
     "); 
Questions connexes