IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[MySQL 4.1.12][Debutant] Select syntax error


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Avatar de Cian
    Inscrit en
    Août 2002
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 181
    Points : 983
    Points
    983
    Par défaut [MySQL 4.1.12][Debutant] Select syntax error
    Bonjour,
    j'ai entre autre deux tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    CREATE TABLE IF NOT EXISTS `mantis_bug_table` (
      `id` int(7) unsigned NOT NULL auto_increment,
      <b>`project_id` int(7) unsigned NOT NULL default '0',</b>
      `reporter_id` int(7) unsigned NOT NULL default '0',
      `handler_id` int(7) unsigned NOT NULL default '0',
      `duplicate_id` int(7) unsigned NOT NULL default '0',
      `priority` int(2) NOT NULL default '30',
      `severity` int(2) NOT NULL default '50',
      `reproducibility` int(2) NOT NULL default '10',
      `status` int(2) NOT NULL default '10',
      `resolution` int(2) NOT NULL default '10',
      `projection` int(2) NOT NULL default '10',
      `category` varchar(64) NOT NULL default '',
      `date_submitted` datetime NOT NULL default '1970-01-01 00:00:01',
      `last_updated` datetime NOT NULL default '1970-01-01 00:00:01',
      `eta` int(2) NOT NULL default '10',
      `bug_text_id` int(7) unsigned NOT NULL default '0',
      `os` varchar(32) NOT NULL default '',
      `os_build` varchar(32) NOT NULL default '',
      `platform` varchar(32) NOT NULL default '',
      `version` varchar(64) NOT NULL default '',
      `fixed_in_version` varchar(64) NOT NULL default '',
      `build` varchar(32) NOT NULL default '',
      `profile_id` int(7) unsigned NOT NULL default '0',
      `view_state` int(2) NOT NULL default '10',
      `summary` varchar(128) NOT NULL default '',
      `sponsorship_total` int(7) NOT NULL default '0',
      `sticky` tinyint(1) NOT NULL default '0',
      PRIMARY KEY  (`id`),
      KEY `sponsorship_total` (`sponsorship_total`),
      KEY `fixed_in_version` (`fixed_in_version`),
      KEY `status` (`status`),
      KEY `project_id` (`project_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=1368 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    DROP TABLE IF EXISTS `mantis_project_table`;
    CREATE TABLE IF NOT EXISTS `mantis_project_table` (
      `id` int(7) unsigned NOT NULL auto_increment,
      `name` varchar(128) NOT NULL default '',
      `status` int(2) NOT NULL default '10',
      `enabled` int(1) NOT NULL default '1',
      `view_state` int(2) NOT NULL default '10',
      `access_min` int(2) NOT NULL default '10',
      `file_path` varchar(250) NOT NULL default '',
      `description` text NOT NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `name` (`name`),
      KEY `id` (`id`),
      KEY `view_state` (`view_state`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

    C'est deux tables sont donc liées par la clé "project_id" qui relie un bug à un projet. (Vous reconnaitrez peut-être la structure du logiciel mantis)

    J'essaie de récuperer le nombre de bugs existants pour un ou plusieurs projet sur une période de temps.

    J'avais donc imaginé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*) from mantis_bug_table 
    WHERE date_submitted>="2006-12-01" 
    AND date_submitted<="2006-12-31" 
    AND project_id = 
    
    'SELECT id FROM mantis_project_table WHERE name="TEST" OR name="GENERAL"'
    Mais çà ne marche pôa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TEST" OR name="GENERAL""' at line 1

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    1/ pourquoi avez-vous encadré cette partie de votre requête de 2 simples quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT id FROM mantis_project_table WHERE name="TEST" OR name="GENERAL"'
    2/ est-ce que cette requête peut ramener plus d'une ligne ?
    Si c'est le cas il vous faut remplacer le "=" précédant cette requête par IN ou EXISTS (cf la structure d'une sous-requête corrélée avec EXISTS)
    3/ si vous utilisez une sous-requête, assurez-vous que votre version de MySQL est supérieure à la 4.1

  3. #3
    Membre éprouvé
    Avatar de Cian
    Inscrit en
    Août 2002
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 181
    Points : 983
    Points
    983
    Par défaut
    Citation Envoyé par Magnus
    1/ pourquoi avez-vous encadré cette partie de votre requête de 2 simples quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT id FROM mantis_project_table WHERE name="TEST" OR name="GENERAL"'
    Je pensais que c'était nécessaire. Je les enlève donc.

    Citation Envoyé par Magnus
    2/ est-ce que cette requête peut ramener plus d'une ligne ?
    Si c'est le cas il vous faut remplacer le "=" précédant cette requête par IN ou EXISTS (cf la structure d'une sous-requête corrélée avec EXISTS)
    Oui je peux avoir plusieurs lignes. Je regarde le EXITS

    Citation Envoyé par Magnus
    3/ si vous utilisez une sous-requête, assurez-vous que votre version de MySQL est supérieure à la 4.1
    [/QUOTE]
    je suis en MySQL 4.1.12-max sur le serveur localhost

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Est-ce que ce qui suit fonctionne ?
    j'ai adapté la requête fournie, remplacé mes guillemets par des quotes simples et le "=" par un IN pour la sous-requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*) from mantis_bug_table 
     WHERE date_submitted >= '2006-12-01' 
       AND date_submitted <= '2006-12-31' 
       AND project_id IN (SELECT id FROM mantis_project_table 
                           WHERE name='TEST' OR name='GENERAL')
    Une fonction de transtypage de chaîne en date ne serait pas superflue à mon sens, afin que les tests sur les dates ne renvoie pas d'erreurs

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/07/2012, 01h26
  2. [MySQL] [MySQL] SQLSTATE[42000]: Syntax error or access violation: 1064
    Par Domotik35 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/07/2011, 17h42
  3. Mysql syntax error
    Par toniobuteau dans le forum Débuter
    Réponses: 3
    Dernier message: 17/06/2011, 11h29
  4. [Debutant] Parse error: syntax error, unexpected T_VARIABLE in
    Par yur.miku dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/05/2010, 16h07
  5. Zend Db Select Where et backtick = syntax error
    Par manuscle dans le forum Zend_Db
    Réponses: 1
    Dernier message: 04/03/2010, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo