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

PHP & Base de données Discussion :

[Débutant] Gros soucis requête SQL


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Points : 70
    Points
    70
    Par défaut [Débutant] Gros soucis requête SQL
    Bonjour,

    Voilà j'ai un gros souçis avec une requête, je suis actuellement en train de faire un petit RPG en HTML avec PHP et Mysql et dans la partie du jeu qui s'occupe de l'inventaire du personnage j'ai un souçis

    Voilà mes 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
    CREATE TABLE IF NOT EXISTS `car_inventory` 
    (
      `inventoryItemId` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `inventoryItemCharacterId` int(5) NOT NULL,
      `inventoryItemItemId` int(5) NOT NULL,
      `inventoryItemQuantity` int(5) NOT NULL,
      `inventoryItemEquipped` int(2) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE IF NOT EXISTS `car_items` (
      `itemId` int(11) NOT NULL,
      `itemRaceId` int(11) NOT NULL,
      `itemPicture` text NOT NULL,
      `itemType` varchar(30) NOT NULL,
      `itemLevel` int(11) NOT NULL,
      `itemLevelRequired` int(11) NOT NULL,
      `itemName` varchar(30) NOT NULL,
      `itemDescription` text NOT NULL,
      `itemHpEffect` int(11) NOT NULL,
      `itemMpEffect` int(11) NOT NULL,
      `itemStrengthEffect` int(11) NOT NULL,
      `itemMagicEffect` int(11) NOT NULL,
      `itemAgilityEffect` int(11) NOT NULL,
      `itemDefenseEffect` int(11) NOT NULL,
      `itemDefenseMagicEffect` int(11) NOT NULL,
      `itemWisdomEffect` int(11) NOT NULL,
      `itemPurchasePrice` int(11) NOT NULL,
      `itemSalePrice` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Contenu de la table car_items:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO `car_items` (`itemId`, `itemRaceId`, `itemPicture`, `itemType`, `itemLevel`, `itemLevelRequired`, `itemName`, `itemDescription`, `itemHpEffect`, `itemMpEffect`, `itemStrengthEffect`, `itemMagicEffect`, `itemAgilityEffect`, `itemDefenseEffect`, `itemDefenseMagicEffect`, `itemWisdomEffect`, `itemPurchasePrice`, `itemSalePrice`) VALUES
    (1, 0, 'http://localhost/item.png', 'Item', 1, 1, 'Potion', 'Cette petite fiole vous rendra 100 HP', 100, 0, 0, 0, 0, 0, 0, 0, 50, 10),
    (2, 0, 'http://localhost/item.png', 'Item', 1, 1, 'Ether', 'Cette petite fiole vous rendra 10 MP', 0, 10, 0, 0, 0, 0, 0, 0, 50, 10),
    (3, 0, 'http://localhost/item.png', 'Armor', 1, 1, 'Manteau de laine', 'Ce manteau vous ira a ravir.\r\nCet équipement est disponible pour toutes les classes', 10, 1, 1, 1, 1, 1, 0, 1, 100, 50),
    (4, 0, 'http://localhost/item.png', 'Boots', 1, 1, 'Botte de laine', 'Ses bottes de laine sont 100% moutons.\r\nCet équipement est disponible pour toutes les classes', 10, 1, 1, 1, 1, 1, 0, 1, 100, 50),
    (5, 0, 'http://localhost/item.png', 'Gloves', 1, 1, 'Gants de laine', 'Ses gants vous donneront vous protégerons des courants d\'air mais juste pour les mains.\r\nCet équipement est disponible pour toutes les classes', 10, 1, 1, 1, 1, 1, 0, 1, 100, 50),
    (6, 0, 'http://localhost/item.png', 'Helmet', 1, 1, 'Casque de laine', 'Ce casque vous protégera juste de la pluie.\r\nCet équipement est disponible pour toutes les classes', 10, 1, 1, 1, 1, 1, 0, 1, 100, 50),
    (7, 0, 'http://localhost/item.png', 'Weapon', 1, 1, 'Boule de laine', 'Cette boule de laine pourra être lancée sur vos ennemis en leur occasionnant peu de dégâts.\r\nCet équipement est disponible pour toutes les classes', 10, 1, 1, 1, 1, 1, 0, 1, 100, 50);
    Dans la table car_inventory il n'y a que cet enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `car_inventory` (`inventoryItemId`, `inventoryItemCharacterId`, `inventoryItemItemId`, `inventoryItemQuantity`, `inventoryItemEquipped`) VALUES
    (1, 1, 7, 1, 1);
    Et pourtant quand je fais cette requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM car_items, car_inventory 
    WHERE itemId = inventoryItemItemId
    AND itemType = 'Armor' 
    OR itemType = 'Boots' 
    OR itemType = 'Gloves' 
    OR itemType = 'Helmet' 
    OR itemType = 'Weapon'
    AND inventoryItemCharacterId = ?
    ORDER BY itemType
    Il me sort 4 objets... Alors que dans la table car_inventory le joueur n'en possède que un seul avec l'Id 7 soit l'arme boule de laine (drôle de nom je sais ^^)
    Mais alors pourquoi est-ce que il me sort 4 objets supplémentaire...

    Voici le resulat:
    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
    127.0.0.1/caranille/car_inventory/		http://localhost/phpmyadmin/tbl_sql.php?db=caranille&table=car_inventory
     La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Éditer, Copier et Supprimer ne sont pas disponibles. 
     
     Affichage des lignes 0 -  3 (total de 4, traité en 0,0000 seconde(s))
     
    SELECT * FROM car_items, car_inventory 
    WHERE itemId = inventoryItemItemId
    AND itemType = 'Armor' 
    OR itemType = 'Boots' 
    OR itemType = 'Gloves' 
    OR itemType = 'Helmet' 
    OR itemType = 'Weapon'
    AND inventoryItemCharacterId = 1
    ORDER BY itemType
     
    itemId	itemRaceId	itemPicture	itemType   	itemLevel	itemLevelRequired	itemName	itemDescription	itemHpEffect	itemMpEffect	itemStrengthEffect	itemMagicEffect	itemAgilityEffect	itemDefenseEffect	itemDefenseMagicEffect	itemWisdomEffect	itemPurchasePrice	itemSalePrice	inventoryItemId	inventoryItemCharacterId	inventoryItemItemId	inventoryItemQuantity	inventoryItemEquipped	
     
    4	0	http://localhost/item.png	Boots	1	1	Botte de laine	Ses bottes de laine sont 100% moutons. Cet équipe...	10	1	1	1	1 1	0	1	100	50	1	1	7	1	1	
    5	0	http://localhost/item.png	Gloves	1	1	Gants de laine	Ses gants vous donneront vous protégerons des cour...	10	1	1	1	1	1	0	1	100	50	1	1	7	1	1	
    6	0	http://localhost/item.png	Helmet	1	1	Casque de laine	Ce casque vous protégera juste de la pluie. Cet é...	10	1	1	1	1	1	0	1	100	50	1	1	7	1	1	
    7	0	http://localhost/item.png	Weapon	1	1	Boule de laine	Cette boule de laine pourra être lancée sur vos en...	10	1	1	1	1	1	0	1	100	50	1	1	7	1	1
    Merci beaucoup de votre aide car là je suis perdu.
    En gros il faut que la requête recherche l'objet dans car_items avec l'enregistrement dans la table car_inventory Et il faut que l'objet soit de type soit Armor, Boots, Helmet, Gloves ou Weapon car il y a d'autre type d'objet comme des potions mais là je ne cherche à afficher que les objets de type équipement

    Cordialement,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Attention quand tu enchaines des conditions AND/OR il faut préciser les conditions qui fonctionnent ensemble avec des parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    itemId = inventoryItemItemId
    AND (
       itemType = 'Armor' 
       OR itemType = 'Boots'
       ...
    )
    AND inventoryItemCharacterId = 1
    Mais plus proprement, fais tes jointures avec JOIN et utilise IN pour faire les listes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM car_items
    JOIN car_inventory  ON itemId = inventoryItemItemId
    WHERE
    itemType IN ('Armor', 'Boots', 'Gloves', 'Helmet', 'Weapon')
    AND inventoryItemCharacterId = ?
    ORDER BY itemType
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Souci requête sql !
    Par Lenou dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/12/2010, 14h46
  2. Souci requête SQL
    Par marime dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/06/2009, 18h46
  3. [SQL] Soucis requête SQl sur serveur Free
    Par Ryuuku dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 16h20
  4. [Débutant] ClassCastException après requête SQL
    Par tck-lt dans le forum Hibernate
    Réponses: 10
    Dernier message: 06/12/2006, 16h18
  5. [débutant] Différence de requête SQL
    Par mchicoix dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/03/2006, 17h39

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