Problème requete SQL : double et différent

Problème requete SQL : double et différent - SQL/NoSQL - Programmation

Marsh Posté le 26-11-2009 à 18:59:15    

Bonjour,
 
J'ai deux problèmes avec une requête SQL.
Voici la requête :
 

Code :
  1. SELECT items.id, items.name, items.first_pic
  2. FROM items,bids
  3. WHERE items.user_id='.$this->params['id'].' AND bids.item_id!=items.id


 
Le but de cette requête est de prendre les items qui ne sont pas aussi dans la table bids.
 
Premier problème : le différent (!=) ne fonctionne pas. Ils m'affichent tous les items, même ceux qui sont dans la table bids. J'ai essayé avec <> mais toujours le même problème.
Deuxième problème : Quand je demande de m'afficher la requête, il m'affiche une fois chaque item qui est aussi de bids (alors qu'il ne devrait pas), mais il m'affiche les bons items en double !
Donc j'ai ceux que je ne veux pas une fois, et ceux que je veux en double.
Il n'y a pas de doublons dans la BDD.
 
Si quelqu'un pouvait me dire d'où vient le problème...  
Merci d'avance pour vos réponses

Reply

Marsh Posté le 26-11-2009 à 18:59:15   

Reply

Marsh Posté le 27-11-2009 à 10:19:28    

Bonjour gente damoiselle,
 
Cette n'est pas une bonne approche pour votre problème.
Une façon simple de faire ce que vous voulez est de faire une jointure gauche avec une vérification IS NULL.
Par exemple :
 

Code :
  1. SELECT i.id, i.name, i.first_pic
  2. FROM items i
  3. LEFT JOIN bids b ON b.item_id=i.id
  4. WHERE i.user_id=$id AND b.item_id IS NULL


 
À voir si la requête reste performante avec des très grosses tables...

Reply

Marsh Posté le 28-11-2009 à 17:20:53    

Depuis MySQL 5, il faut que dans ton ON, la première table soit la première table de ta jointure. La deuxième ligne doit donc être plutôt :

Code :
  1. LEFT JOIN bids b ON i.id=b.item_id


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed