MySQL : #1064 - Erreur de syntaxe près de

Résolu/Fermé
stagiaire1 - 7 mai 2013 à 10:10
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 - 7 mai 2013 à 12:57
Bonjour,

Je débute avec MySQL. J'utilise le module phpMyAdmin avec EasyPHP 12.1. Je souhaiterai récupérer les url des produits virtuels de table1 en connaissant seulement un idU.
Voici mes tables :


table 1

idP
name
is_virtual
url


table 2

idO_D
#idP
#idO



table 3

idO
#idU
is_delivered

Voici la requête que j'effectue :

SELECT url
FROM table1
INNER JOIN table2 ON table2.idP = table1.idP
INNER JOIN table3 ON table3.idO = table2.idO
WHERE table3.idU='1'
AND table3.is_delivered='0'
AND table1.is_virtual='1';


J'ai l'erreur "#1064 - Erreur de syntaxe près de 'order ON order.idO = order_detail.idO WHERE order.idU='1' AND order.is_delivered' à la ligne 4"

J'ai essayé une autre syntaxe :

SELECT P.url
FROM order O, order_detail OD, product P
WHERE O.idU ='1'
AND O.is_delivered='0'
AND O.idO=OD.idO OD.idP=P.idP
AND P.is_virtual='1';

Mais toujours une erreur : "#1064 - Erreur de syntaxe près de 'order O, order_detail OD, product P WHERE O.idU ='1' AND O.is_delivered='0' ' à la ligne 2"

Pourriez-vous m'éclairer?

Merci d'avance


7 réponses

Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 10:28
Bonjour,

Envoie moi ton script de création de table + tes données de tests (CREATE TABLE + INSERT INTO) pour que je puisse regarder.

Cordialement,
Gigatrappeur
1
stagiaire_1 Messages postés 17 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 14 juin 2013 8
Modifié par stagiaire_1 le 7/05/2013 à 11:03
Je vous prie de m'excuser du temps de réponse, j'ai du me créer un compte sinon je ne pouvais pas poster de messages à cause du "titre du message non renseigné".

Ce que je cherche à faire : J'ai un "user" avec un id que je connais qui souhaite visualiser ses produits virtuels (champ is_virtual de la table product) parmi les commandes qu'il a passé et qui n'ont pas été livrées (champ is_delivered de la table order).

Voici le script de création, la table1 correspond à la table product, la table2 correspond à la table order_detail, la table3 correspond à la table order.

--Structure de la table 'order'
--


CREATE TABLE IF NOT EXISTS 'order' (

'idO' int(12) unsigned NOT NULL AUTO_INCREMENT,

'idU' int(12) unsigned NOT NULL,

'is_delivered' int(1) NOT NULL,

PRIMARY KEY ('idO')
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;




--
-- Contenu de la table 'order'
--


INSERT INTO 'order' ('idO', 'idU', 'is_delivered') VALUES

(1, 1, 0),

(2, 1, 0);


--
-- Structure de la table 'order_detail'
--


CREATE TABLE IF NOT EXISTS 'order_detail' (

'idO_D' int(11) unsigned NOT NULL AUTO_INCREMENT,

'idO' int(11) unsigned NOT NULL,

'idP' int(11) unsigned NOT NULL,

PRIMARY KEY ('idO_D')
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;



--
-- Contenu de la table 'order_detail'
--


INSERT INTO 'order_detail' ('idO_D', 'idO', 'idP') VALUES

(1, 1, 4),

(2, 1, 2),

(3, 2, 4),

(4, 2, 5);




--
-- Structure de la table 'product'
--


CREATE TABLE IF NOT EXISTS 'product' (

'idP' int(8) NOT NULL AUTO_INCREMENT,

'name' varchar(32) NOT NULL,

'is_virtual' int(1) NOT NULL,

'url' varchar(255) NOT NULL,

PRIMARY KEY ('idP')
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;



--
-- Contenu de la table 'product'
--


INSERT INTO 'product' ('idP', 'name', 'is_virtual', 'url') VALUES

(1, 'Samsung Galaxy S3', 0, ''),
(2, 'IPad mini', 0, ''),

(3, 'Angry Birds', 1, ''),

(4, 'Aptoide', 1, 'http://127.0.0.1/apps/Aptoide.apk'),

(5, 'Talking tom cat 2', 1, 'http://127.0.0.1/apps/Talking_Tom_Cat_2_Free_1.2.1.apk');






--
-- Structure de la table 'user'
--


CREATE TABLE IF NOT EXISTS 'user' (

'idU' int(11) NOT NULL AUTO_INCREMENT,

'surname' varchar(32) NOT NULL,

'name' varchar(32) NOT NULL,

'pass' varchar(32) NOT NULL,

'email' varchar(255) NOT NULL,

'dateOfBirth' varchar(12) NOT NULL,

PRIMARY KEY ('idU')
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;




--
-- Contenu de la table 'user'
--


INSERT INTO 'user' ('idU', 'surname', 'name', 'pass', 'email', 'dateOfBirth') VALUES

(1, 'Jean', 'Jean', 'yop', 'jean@jean.fr', '06/06/1991');



1
Utilisateur anonyme
7 mai 2013 à 11:27
Bonjour

Mauvaise idée d'appeler ta table 'order'.
À tous les coups c'est un mot réservé.
Change le nom ou, si tu tiens absolument à le garder, entoure-le d'accents graves (Alt Gr 7)
1
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 11:35
Bonjour,

En faite, "order" est un mot réservé. Il sert à ordonner les résultats d'un select.
Tu ne peut donc pas l'utiliser en tant que nom de table.

Voilà.

Cordialement,
Gigatrappeur
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stagiaire_1 Messages postés 17 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 14 juin 2013 8
7 mai 2013 à 11:45
Merci beaucoup ça marche maintenant.

Voici la requête que j'utilise :

SELECT P.url
FROM 'order' O, order_detail OD, product P
WHERE O.idU = '1'
AND O.is_delivered = '0'
AND O.idO = OD.idO
AND OD.idP = P.idP
AND P.is_virtual = '1';

J'aurais une autre petite question, par exemple cette requête me renvoi les lignes suivantes :
http://img69.imageshack.us/img69/4738/resultwl.jpg

Comment puis-je éviter les doublons ?

Merci
1
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 11:50
Fais un select distinct :
SELECT DISTINCT P.url 
FROM ...


Gigatrappeur
1
stagiaire_1 Messages postés 17 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 14 juin 2013 8
Modifié par stagiaire_1 le 7/05/2013 à 11:53
Super, merci beaucoup pour votre aide.
1
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2013 à 12:57
Peux-tu passer le sujet en résolu, si c'est le cas ? merci.
0