Aller au contenu

select.. where XXX AND YYY AND.....


Lentreprenaute

Sujets conseillés

bonjour,

je voudrai lire un fichier qui contient des données, de ce type: ( 99,7,8,1999,.....)

Chiffre,chiffre,chiffre etc..... et interroger ma base pour chaque chiffre, comme il peut y avoir entre 0 à l'infini, sans aucune cohérence dans la numérotation,

Je me demande comment interroger ma base, merci de votre aide.

Florent

Modifié par Lentreprenaute
Lien vers le commentaire
Partager sur d’autres sites

Déjà, pour lire le fichier, il faut utiliser un langage spécifique (par exemple le PHP).

Tu dois avec ce langage, ouvrir le fichier, lire son contenu, et séparer les chiffres des virgules (J'espère pour toi que tu utilises le point pour les décimaux, s'il y en a).

En php, ça pourrait donner ça :

<?php
// Le code de connexion à ta bdd

// Ouverture du fichier, récupération de son contenu
$filename = "chemin_vers_ton_fichier.txt";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);

// Séparation des chiffres, et organisation dans un tableau
$tab = explode(',', $contents);

// boucle effectuant la requête pour chaque élément du tableau
foreach($tab as $chiffre) {
$req = mysql_query("SELECT * FROM tatable WHERE tonchamp = $chiffre");
// Suite du traitement
}
?>

Modifié par captain_torche
Lien vers le commentaire
Partager sur d’autres sites

Une première réponse possible :

SELECT *
FROM table WHERE champ IN ( XX, XX, XX, XX, XX )

Inspire toi de la solution de captain torche et génère la liste de ta clause IN en php.

Là ou je ne suis pas d'accord avec captain torche : Ne jamais mettre une requête dans une boucle.

Tu vas faire n requêtes, là ou une seule est suffisante.

Maintenant : qu'est-ce que tu entend par infini ?

Des millions de lignes dans le fichier, des milliers ou des centaines ?

Modifié par anorci
Lien vers le commentaire
Partager sur d’autres sites

Effectivement, je dois pas être bien réveillé :)

Merci de m'avoir corrigé.

<{POST_SNAPBACK}>

Je t'offre un café ;)

Rassures-toi, j'avais même pas vu qu'il lisait dans un fichier. C'est ta solution qui me l'a montré. Pas réveillé non plus.

Comme quoi, 2 cerveaux valent mieux qu'un :D

Modifié par anorci
Lien vers le commentaire
Partager sur d’autres sites

[...]

$tabchiffre = array();

foreach($tab as $chiffre) {
$tabchiffre[] = $chiffre;
}

if( count($tabchiffre) != 0 ) {

$req = mysql_query("SELECT * FROM tatable WHERE tonchamp IN implode(",",$tabchiffre);

}

C'est faisable assez rapidement.

Modifié par petit-ourson
Lien vers le commentaire
Partager sur d’autres sites

Ben, si j'ai bien compris, il n'est pas nécessaire de passer le contenu en tableau, puis de le reserializer, puisqu'ils sont déjà séparés par des virgules dans le cookie.

On aurait donc :

if($_COOKIE['nom'])
$req = mysql_query("SELECT * FROM tatable WHERE tonchamp IN (".$_COOKIE['nom'].")");

Lien vers le commentaire
Partager sur d’autres sites

Ben, si j'ai bien compris, il n'est pas nécessaire de passer le contenu en tableau, puis de le reserializer, puisqu'ils sont déjà séparés par des virgules dans le cookie.

On aurait donc :

if($_COOKIE['nom'])
$req = mysql_query("SELECT * FROM tatable WHERE tonchamp IN (".$_COOKIE['nom'].")");

<{POST_SNAPBACK}>

Cette solution est idéale je pense.

Mais il faut tout de même pensé à vérifier la valeur contenu dans le cookie, histoire d'éviter les injections sql ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...