Afficher ce qui n'existe pas dans la BDD

Afficher ce qui n'existe pas dans la BDD - PHP - Programmation

Marsh Posté le 17-02-2010 à 18:32:23    

Bonjour,
le sujet peut paraître saugrenu donc je m'explique.
 
J'ai ma base de données (MySQL) avec des enregistrements qui correspondent aux albums de bandes dessinées que je possèdent.
Par exemple, pour telle série de BD, j'ai les albums :
1 2 3 4 6 7 9 10 12
sur 15 albums.
 
J'aimerais faire une requête qui m'affiche les albums que je n'ai pas. Dans mon exemple, vu que j'ai 15 albums, j'aimerais que ça m'affiche donc :
5 8 11 12 13 14 15
 
Cela pour faciliter mes futurs achats.
J'ai créé un champ dans la BDD qui indique le nombre d'albums existants. Reste plus qu'à faire la requête mais je coince.
 
P.S. : j'ai placé ce message dans la catégorie PHP car peut-être que pour arriver à mes fins, quelques lignes php seront nécessaires.
 
Merci pour votre aide !
 
Maxime


Message édité par lofo7 le 17-02-2010 à 19:20:30
Reply

Marsh Posté le 17-02-2010 à 18:32:23   

Reply

Marsh Posté le 17-02-2010 à 19:43:09    

Tu fais une boucle sur les albums que tu as, et tu parcours ta liste en faisant une boucle dont la limite est le nb d'albums, et si l'abum n'est pas dans ta liste, tu affiches le numéro.


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

Marsh Posté le 17-02-2010 à 20:24:22    

Ok pour la première partie de ta réponse. Jusque "en faisant une boucle dont la limite est le nb d'albums" ça va.
 
Mais pour la suite, j'utilise quel fonction ?

Reply

Marsh Posté le 17-02-2010 à 20:35:10    

le pb c'est en cas de nouvel album ...
 
je m'explique. Aujourd'hui la collection "lambda" a 5 ouvrages : 1 - 2 - 3 - 4 - 5. Tu as les 1, 3, 4 et 5 (donc il ne te manque que le 2) : super. Mais si demain le n°6 sort, ton outil ne te dira pas que tu ne l'as pas ...
 
 
Si tu veux tout de même travailler avec la solution de "aideinfo" tu rapatries les albums que tu as dans un tableau, par exemple :

Code :
  1. $array_albums = array();
  2. while($album = mysql_fetch_array($albums))
  3. {
  4.     $array_albums[] = $album['id'];
  5. }


 
A ce niveau, $array_albums contiendra 1, 3, 4, 5.
On supposera alors que le dernier numéro sera le plus grand élément.
 

Code :
  1. $dernier_numero = max($array_albums);


 
Maintenant tu n'as plus qu'à faire une boucle pour savoir quels numéros sont manquants :

Code :
  1. for($a = 1; $a <= $dernier_numero; $a++)
  2. {
  3.     if (!in_array($a, $array_albums))
  4.     {
  5.         echo sprintf("L'album %d est manquant !<br>", $a);
  6.     };
  7. };


 
 
L'autre solution que je te propose est de faire une table albuls avec la quantité (par défaut zéro)
 
en clair, tu aurais qqch du style
ID   album   quantité
1    alpha     1
2    beta      0
3    gamma   1
4    delta     1
5    epsilon   1
 
Et il te suffit alors de faire une requête sur t table WHERE quantite='0'
 
Avantage : lorsque tu ajoutes un album, la quantité est d'office à zéro.
(contrairement à l'autre solution où le dernier album supposé est le dernier que tu as déclaré ...)
 


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 17-02-2010 à 21:01:07    

En fait, je n'avais précisé dans mon premier message que j'avais déjà la quantité d'albums sortis insérée dans une de mes tables. J'ai donc pu l'utiliser avec ta méthode.
 
Merci beaucoup, tout marche très bien ! :)
Maxime

Reply

Marsh Posté le 18-02-2010 à 09:47:51    

Autrement, il y a une solution qui pourrait être encore mieux, celle d'avoir une table avec les albums, et une autre avec ceux que tu possèdes. Et puis tu fais une requête SELECT id_album FROM latable WHERE id_album NOT IN (SELECT id from albums_possedes WHERE collection='lambda');


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Sujets relatifs:

Leave a Replay

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