Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2007, 09h43   #1
Membre du Club
 
Inscription : janvier 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 97
Points : 40
Points : 40
Par défaut [SQL] UNION et alias sur table

Bonjour a tous !

j'ai quatre table :

piece(num_piece,libel_piece, ......)
appareil(num_appareil,libel_appareil, ....,#num_marque)
marque(num_marque,nom_marque)
reparer(#num_piece,#num_appareil)

or je veut selectionner les les piece suivant leur libellé, mais je veut avoir
celle qui repare un appareil ainsi que celle qui n'en repare pas et les classer par
marque. j'espere etre clair.

je pense utiliser l'UNION mais je doit vous avouer que je ne le maitrise pas encore tres bien

voici ma requettre pour l'instant

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 SELECT *
FROM (
 
    SELECT *
    FROM `piece` , `reparer` , `appareil` , `marque`
    WHERE `piece`.`num_piece` = `reparer`.`num_piece`
    AND `reparer`.`num_appareil` = `appareil`.`num_appareil`
    AND `appareil`.`num_marque` = `marque`.`num_marque`
    AND `libel_piece` LIKE '%res%'
    UNION 
    SELECT *
    FROM `piece`
    WHERE `num_piece` NOT IN 
    (
          SELECT `num_piece`
          FROM `reparer`
     )
)
GROUP BY `nom_marque` , `libel_piece`
LIMIT 0 , 30

et l'erreur
Citation:
#1248 - Every derived table must have its own alias
donc apparement ca porte sur les allias, mais comment on fait pour mettre un allias a une table je veut dire un champ je vois parfaitemeent mais une table ?

merci d'avance de votre aide
phoeniix07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 13h28   #2
Membre du Club
 
Inscription : janvier 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 97
Points : 40
Points : 40
j'ai un debut de solution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 SELECT *
FROM (
(

SELECT *
FROM `piece` , `reparer` , `appareil` , `marque`
WHERE `piece`.`num_piece` = `reparer`.`num_piece`
AND `reparer`.`num_appareil` = `appareil`.`num_appareil`
AND `appareil`.`num_marque` = `marque`.`num_marque`
AND `libel_piece` LIKE '%res%'
)
UNION (

SELECT *
FROM `piece`
[COLOR="Blue"]WHERE `num_piece` NOT
IN (

SELECT `num_piece`
FROM `reparer`
)
)
) AS t
GROUP BY `nom_marque` , `libel_piece`
LIMIT 0 , 30
bon maintenant ca me renvoie une erreur

Code :
#1222 - The used SELECT statements have a different number of columns
bon alors d'accord il n'ont pas le même nombre de colonne ! mais alors comment detourner la chose ?
phoeniix07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 14h19   #3
Membre du Club
 
Inscription : janvier 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 97
Points : 40
Points : 40
bon la solution que j'ai trouver

Code sql :
1
2
SELECT DISTINCT * FROM piece LEFT JOIN reparer ON piece.num_piece = reparer.num_piece LEFT JOIN appareil ON reparer.num_appareil = appareil.num_appareil LEFT JOIN marque ON appareil.num_marque=marque.num_marque WHERE libel_piece LIKE "%res%"
ORDER BY nom_marque, libel_piece
phoeniix07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h23.


 
 
 
 
Partenaires

Hébergement Web