Comparaison ?complexe? dans la base de donnée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comparaison ?complexe? dans la base de donnée

Re: Comparaison ?complexe? dans la base de donnée

par nagstef » 06 janv. 2016, 16:00

Au final, je ne me suis pas plus que cela penché sur mysqli.. puisque j'avais encore des erreurs à l'exécution (malgré la rectification des id_resa en index_resa et debut_sejour en debut_sejour_client), donc, j'ai suivi un autre chemin, qui est de ne faire un check que lorsque la table a été modifiée en recherchant son Upadte_time.

Je prendrai le temps de regarder plus profondément ton code, car il me parait bien plus abouti dans les conditions, et la manière d'écrire que moi..

Merci encore.. Stéphane

Re: Comparaison ?complexe? dans la base de donnée

par Patriboom » 06 janv. 2016, 11:31

On pourrait essayer de joindre tout cela en une seule requête, puisque tu veux vraiment économiser les ressources du serveur.

Code : Tout sélectionner

$reponse = mysqli_query("SELECT DISTINCT index_resa, nom_client, id_hebergement_client, COUNT(id_resa) AS Combien FROM clients WHERE status_client = 'demandeur' AND debut_sejour > ".time()." GROUP BY index_resa "); while ($donnees = mysqli_fetch_array($reponse)) { echo ($donnees["Combien"] > 1 && $donnees["Combien"] < 4 ) ? "<a href='index.php?page=recherche&id=".$donnees['index_resa']."'>".$donnees['nom_client']."</a> - " : "rien"; echo '<br />'; }

Re: Comparaison ?complexe? dans la base de donnée

par nagstef » 06 janv. 2016, 10:32

Merci encore..
Il n’était pourtant pas si tard hier soir, mais il est vrai que je me suis un peu embrouillé entre "bdd" et "table"..

En effet, les infos dont je parle sont dans une même table "clients".
Il y a donc plusieurs milliers de lignes, chacune avec une 20aine d'entrées (nom_client, date_naissance, date_arrivee, date_depart, etc ....).

Chaque personne d'une même famille est reliée par une même valeur index_resa.
Chaque personne d'une même réservation doit obligatoirement (dans mon cas) être positionnée dans un même logement. Je voulais m'assurer qu'en parcourant chaque index_resa distinctes, toutes les personnes de cette réservation avaient bien le même logement.

J'ai donc fait pour le moment cette requête, qui a le mérite de fonctionner, mais est-elle la plus simple et la moins gourmande en ressources ?

Code : Tout sélectionner

$reponse = mysql_query("SELECT DISTINCT index_resa,nom_client FROM clients WHERE status_client='demandeur' and debut_sejour_client>".time()); $info=""; While ($donnees=mysql_fetch_array($reponse)) { $reponse1 = mysql_query("SELECT DISTINCT id_hebergement_client FROM clients WHERE index_resa=".$donnees['index_resa']." and present='oui'"); If (mysql_num_rows($reponse1)>1 and mysql_num_rows($reponse1)<4) { $info.="<a href='index.php?page=recherche&id=".$donnees['index_resa']."'>".$donnees['nom_client']."</a> - "; } } if ($info<>"") { Echo "<strong>Incohérence logement</strong> : ".$info; }
En vous remerciant. Stéphane

Re: Comparaison ?complexe? dans la base de donnée

par Spols » 06 janv. 2016, 09:24

Je ferait bien une requète sur ta table client avec un left join sur cette même table avec comme condition id_reservation identique et id_logement différent.

Si je ne me trompe pas, cela devrait te donner tous les clients qui n'ont pas la même chambre. Mais potentiellement aussi les réservations de plusieurs chambres aussi.

Re: Comparaison ?complexe? dans la base de donnée

par Patriboom » 06 janv. 2016, 01:40

Sans structure des tables, sans résultat final plus précisé, tu chercheras longtemps de l'aide.
Fais-nous un dessin, un schema, quelque chose qui nous fasse comprendre le résultat final attendu. Là, ce n'est pas très clair.

Re: Comparaison ?complexe? dans la base de donnée

par nagstef » 06 janv. 2016, 01:19

Merci pour ton aide..
Si je peux me permettre, je reprends 2-3 infos !! :)

La table 'clients' possède bien plus d'entrées que celles-là, mais voici les 2 entrées qui me paraissent pertinentes :
id_reservation
id_hebergement

Je souhaiterais effectuer la recherche dans toute la base (bien sur, je rajouterai une condition de chercher après une date précise - aujourd'hui par exemple - afin de limiter la requête au maximum).
Toutefois, lorsqu'il y a 75 logements, entre 2 et 8 personnes par logement, et 52 semaines, ca fait des possibilités..

Et comme l’intérêt de cette demande, est de s'afficher en page principale (index), la requête se faisant à chaque rafraîchissement/rechargement, je souhaiterais trouver une requête pas trop gourmande, même si celle-ci se fait en intranet, sur un serveur local.

Merci encore, Stéphane

Re: Comparaison ?complexe? dans la base de donnée

par Patriboom » 06 janv. 2016, 00:57

Bonjour nagstef,

sans la structure de ta base ... c'est un peu flou, mais bon.

Il suffirait de faire une requête avec un JOIN et trier par ordre de id_reservation du genre :

Code : Tout sélectionner

SELECT RESERV.*, PERS.Prenom, PERS.NomFamille FROM table_reservation AS RESERV JOIN table_personnes AS PERS ON PERS.id_reserv = RESERV.id WHERE RESERV.LaDate = '2016-01-12' ORDER BY RESERV.id ASC, PERS.Nom ASC, PERS.Prenom ASC
Ensuite tu fais la liste de tes réservations et les noms associés à un même id de réservation se trouveront à la suite, qu'il y en ait un ou mille (ouin, t'as de grandes chambres à ton hôtel!!! )

Comparaison ?complexe? dans la base de donnée

par nagstef » 05 janv. 2016, 23:11

Bonjour,

Je voudrais savoir s'il existe une formule spéciale pour faire ce qui suit :

J'ai une base de donnée dans laquelle chaque ligne est une personne.
La plupart de ces personnes sont reliées entre elles par un numéro identique de réservation : ce sont des personnes d'une même famille qui participent à un même séjour de vacances.

Ces personnes sont sensées aussi avoir la même "id" de leur hébergement.

Je voudrais donc savoir s'il existe une méthode simple pour faire un check de la bdd afin qu'elle compare toutes les réservations, et qu'elle s'assure que l'id de l’hébergement est bien le même pour chaque participant de la réservation en question.

Bien sur, je pourrais faire une requête imbriquée dans une autre, mais peut-être existe-t'il plus simple.

En vous remerciant de votre aide..

Stéphane