Aller au contenu

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


Sujets conseillés

Posté (modifié)

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
Posté (modifié)

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
Posté (modifié)

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
Posté (modifié)
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
Posté

merci a tous les deux, ca m'a l'air parfait, pour une production matinale :)

en fait je vais lire un fichier cookie donc, il y aura disons plutot des dizaines de chiffres et pas des millions :o).

Florent

Posté (modifié)

[...]

$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
Posté

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é

eh eh capitain torche,

ca me parait ideal plus c'est court et simple mieux c'est :o) je teste ca des que j'ai le temps* enfin de ce que j'ai suivi sur le fil ca doit le faire.

merci

Florent

Posté
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 ;)

Veuillez vous connecter pour commenter

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



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