MySQL : #1064 - Erreur de syntaxe près de
Résolu
stagiaire1
-
Gigatrappeur Messages postés 226 Date d'inscription Statut Membre Dernière intervention -
Gigatrappeur Messages postés 226 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- #1064 - erreur de syntaxe près de
- Mysql community server - Télécharger - Bases de données
- Could not connect to mysql! please check your database settings! - Forum Redhat
- Mysql error 1 ✓ - Forum Réseaux sociaux
- Phpmyadmin a tenté de se connecter au serveur mysql, et le serveur a rejeté la connexion. merci de vérifier les valeurs de host, username et password dans la configuration et de s'assurer qu'elles correspondent aux informations fournies par l'administrateur du serveur mysql. ✓ - Forum PHP
- Access vs mysql - Forum Webmastering
7 réponses
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
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
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');
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');
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)
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)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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