> Tous les forums > Forum des Webmasters
 Ne pas lister une ID mysql vide
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
can93
  Posté le 14/11/2005 @ 19:37 
Aller en bas de la page 
Astucien
Bonjour a tous, Titre pas tres clair, mais je m'explique mieux : ID Nom 1 - A 2 - B 3 - C 5 - E Si je suis sur l'id 3, j'aimerais afficher ce qu'il y a avant et apres, en gros l'article d'avant et celui d'apres.. Par logique je ferais Avant : ID-1 Actuel : ID Apres : ID+1 Mais là si je suis au 3e ID et que je veux passer au suivant cela affichera une erreur car l'ID 4 n'existe pas ! Les vides comme cela, viennent de suppressions de lignes.. contrainte obligatoire.. Alors je me demande comment faire.. si il y a une fonction ou un algo pour ça en PHP ? Pourrait-on deplacer le pointeur par rapport aux lignes listés par une requete, et non pas par Addition ou Soustraction des ID ? Je trouve pas comment faire.. Merci [smile][chinois]
Publicité
can93
 Posté le 15/11/2005 à 08:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Je ne pensais pas mes questions aussi compliqués même si je ne les comprends pas..
koala01
 Posté le 15/11/2005 à 12:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Théoriquement, il ne devrait pas arriver que tu aies des identifiant auto-incrémentés dans lesquels il y aurait des trous… Et si ca arrive, tu risques d'être confronté à des problèmes pour les tables qui sont en relations grace à ces identifiants… Le principe qui veut qu'une entrée dans une table ne soit pas effacée s'appelle "l'intégrité référencielle"… Cela signifie simplement qu'il faut faire attention à ne pas supprimer un enregistrement dans une table qui pourrait servir de référence à une dans une autre table (ou bien, tu ne supprimes pas l'enregistrement, ou bien, tu dois veiller à supprimer toutes les références à cet enregistrement dans les autres tables)… Je vais prendre un exemple relativement simple pour la compréhension… Imaginons trente secondes que tu aies une table "membre" (pour un forum)… Chaque membre est identifié par un champs de manière unique (que ce soit un entier auto-incrémenté ou son speudo) Tu disposes aussi d'une table "message" dont un des champs indiquera forcément…qui l'a écrit et qui prendra la valeur … de l'identifiant unique de la table membre Si un membre décide de ne plus intervenir sur le forum (ou si les modérateurs décident de le bannir), ce n'est absolument pas une raison pour supprimer le membre car, ou bien on se trouvera avec des messages qui… n'appartiennent plus à personne, ou bien il faudra aussi supprimer tous les messages de ce membre. Le gros problème, si on supprime les messages du membre, c'est tout simplement que… d'autres gens auront peut être réagi à ses messages… Supprimer les message de l'ancien membre signifie donc courrir le risque que de nombreuses autres interventions (d'autres personnes) soient "décalées" par rapport au "nouveau fil" du sujet… Voilà donc pourquoi il est tès largement recommandé de NE PASsupprimer un enregistrement dans une table… Par contre, rien n'empêche de prévoir un "flag (ou drapeau)" indiquant si l'enregistrement est "actif"(utilisable), ou si au contraire, il est "inactif"(inutilisable)… Ce principe étant acquis, il est tout à fait possible de s'organiser pour n'obtenir que certains enregistrements bien précis dans une table… Il y a deux manières de déterminer le(s)champ(s) qui doivent ressortir… Ces deux manières étant complémentaires. La première étant l'injection d'une condition (qui commence par WHERE (une seule fois, meme s'il y a plusieurs condition) suivit d'un &ventuel terme NOT (qui inverse le reste) et d'un signe d'(in)égalité (<, <=, =, >=, >), ou d'un des termes LIKE 'valeur' ou IN (valeur1,valeur2,valeur3…)) "classique" dans la requete. La deuxième solution permet de sélectionner un (ou plusieurs) enreigstrement(s) si les conditions ne permettaient pas de n'en obtenir qu'un… Un exemple tout bête qui fait ressortir plusieurs enregistrements est la requete [code]SELECT * FROM table[/code] Il est important de comprendre que cette solution est mise en oeuvre APRES que les enregistrements aient suivi une première sélection basées sur les conditions, et que les identifiants ne jouent plus le moindre role. Il s'agit "simplement" de rajouter le terme [code] LIMIT nombre ou LIMIT nombre1, nombre2 [/code] nombre nombre1 et nombre2 devant etre plus grand ou égaux à 0 La solution n'utilisant qu'un nombre fera ressortir que les (nombre) premiers enregistrements sélectionnés par la requete (ce qui signifie que, meme si une valeur de 0 pour nombre est autorisée, elle ne sert pas à grand chose car ca ferait ressortir … 0 enregistrements, ce qui n'est sans doute pas des plus intéressant[clindoeil]) La solution utilisant deux nombre laissera les (nombre1) premiers enregistrement sur le coté, et sortira les (nombre2) enregistrements suivants (une valeur 0 pour nombre1 permettra donc de récupérer le premier enregistrement, mais, encore une fois, une valeur 0 pour nombre2 n'a qu'un intérêt limité [clindoeil]). Il va de soi que, si les conditions fournies ne permettent pas de faire ressortir nombre enregistrement ou (nombre1+nombre2) enregistrements, seuls les enregistrements disponibles seront effectivement retournés [clindoeil] Selon ton exemple, le code [code] SELECT * FROM table LIMIT 2,1 [/code] te renverra donc l'enregistrement 3 - C; le code [code] SELECT * FROM table WHERE ID>3 LIMIT 1 [/code] te renvoyant quant à lui l'enregistrement 5 - E (du fait qu'il s'agit du premier enregistrement qui est plus grand que 3) et le code [code] SELECT * FROM table LIMIT 1,4 [/code] te renvoyant les enregistrements 2,3 et 5… Tu disposes, enfin, si tu y trouves une utilité quelconque, des fonction COUNT(*) qui renvoie le nombre d'enregistrements sélectionnés, MIN(champs) qui renvoie la valeur minimale de champs parmis une sélection et MAX(champs) qui renvoie…la valeur maximale de champs parmis une selection. Sur base de l'exemple que tu donnes, le code [code] SELECT COUNT(*) from table [/code] te renverra donc 4 (car il y a 4 enregistrements dans la table) alors que le code [code] SELECT MIN(ID), MAX(ID) FROM table [/code] te renverra les valeurs 1 et 5 (respectivement la valeur minimale et la valeur maximale trouvée pour ID Enfin, une fois sorti du langage SQL pur, tu disposes également de la fonction PHP mysql_num_rows(resultat de requete) qui renvoie le nombre d'enregistrements qui ont été renvoyés par la requete. Sur base de ce qui précède, tu devrais arriver relativement facilement à mettre au point un algorithme qui te permette d'obtenir le résultat voulu [clindoeil]

Modifié par koala01 le 15/11/2005 12:59
can93
 Posté le 05/12/2005 à 20:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Ah Ben oui pas bête mr Koala [approuve]
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
28,90 €Microsoft Office 2019 Professional Plus à 28,90 €
Valable jusqu'au 30 Juillet

Le vendeur sérieux License Online propose sur Amazon la clé d'activation légale pour Microsoft Office Professionnel 2019 Plus en français à 28,90 €. Cette clé livrée par email vous permettra d'activer Microsoft Office Professionnel 2019 Plus légalement et vous permettra ainsi d'utiliser autant de temps que vous voulez (il s'agit de la version complète et pas d'un abonnement) Word,Excel, PowerPoint, OneNote, Outlook, Publisher et Access 2019 sur un PC. La clé sera à activer sur Office.com où vous pourrez ensuite télécharger toute la suite bureautique. Pour mémoire, Microsoft Office Professionnel 2019 nécessite Windows 10. Pour plus d'info sur la procédure, n'hésitez pas à jeter un oeil à notre dossier pratique Acheter une clé OEM d'Office 2019 et l'installer.


> Voir l'offre
815,54 €Portable 17,3 pouces MSI GF75 (FHD 144 Hz, Core i5, 16 Go, SSD 512 Go, GTX2060 6 Go) à 815,54 €
Valable jusqu'au 30 Juillet

Cdiscount fait une promotion sur le portable MSI GF75 qui passe à 815,54 € avec le code ETEPRO au lieu de 1100 €. Cet ordinateur possède une dalle 17.3 pouces Full HD 144 Hz, est équipé d'un processeur Intel Core i5-10300H, de 16 Go de RAM, d'un SSD de 512 Go et d'une carte graphique GeForce GTX 2060 6 Go. L'ordinateur est livré avec Windows 10.


> Voir l'offre
24,99 €Casque audio bluetooth JBL T460BT à 24,99 €
Valable jusqu'au 30 Juillet

Cdiscount fait une vente flash sur le casque audio sans fil bluetooth JBL T460BT qui passe à 24,99 € livré gratuitement alors qu'on le trouve ailleurs à partir de 49,99 €. Ce casque sans fil bluetooth 4.0 offre une autonomie de 11h, permet de commander sur le casque les appels et la musique et est repliable à plat. Il est rechargeable avec un câble microUSB fourni.


> Voir l'offre

Sujets relatifs
Considérer un champs vide mysql non null
Échec connection base mysql
Captvty 1.10.5.1 : dossier zip vide
une personne s'y connaissant en PHP et MySQL ??
lister avec 2 select sur 2 tables
Trier plusieurs colonnes mysql
quelle version MySQL pour Free ?
Problème gallerie vide avec piwigo
tester un champs mysql
conseil tables mysql
Plus de sujets relatifs à Ne pas lister une ID mysql vide
 > Tous les forums > Forum Forum des Webmasters