mySQL: "non vides" uniquement...
18 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
mySQL: "non vides" uniquement...
Bonjour,
Je me demandais s'il existait une formulation simpliste pour ne sortir que les champs qui sont remplis (nom, et valeur).
Exemple, une table comme ceci:
Je voudrais pouvoir en tirer ceci:
ref: 123
Long: 12mm
haut: 13mm
(donc ne pas afficher "larg", car vide).
NB: La table en question est susceptible d'avoir des dizaines de champs.
Je ne sais pas si c'est très clair ?
Je me demandais s'il existait une formulation simpliste pour ne sortir que les champs qui sont remplis (nom, et valeur).
Exemple, une table comme ceci:
- Code: Tout sélectionner
[ ref | Long | larg | haut ]
[ 123 | 12mm | vide | 13mm ]
Je voudrais pouvoir en tirer ceci:
ref: 123
Long: 12mm
haut: 13mm
(donc ne pas afficher "larg", car vide).
NB: La table en question est susceptible d'avoir des dizaines de champs.
Je ne sais pas si c'est très clair ?
- chtipepere
- WRInaute impliqué

- Messages: 484
- Inscription: Jeu Jan 08, 2004 16:15
Un truc comme ça, ça marche ? :
- Code: Tout sélectionner
SELECT nullif(ref = '', ref)
,nullif(Long = '', Long)
,nullif(larg = '', larg)
FROM table
WHERE ....
hmmm... non
d'autant que ça m'oblige, dans la query, à nommer les éléments, ce que je voudrais qui se fasse seul...
exemple, si j'ajoute une colonne à la table, il faut que pour tout produit pour lequel j'affiche la page, cette nouvelle colonne s'affiche (nom + contenu)...
Il faudrait qu'après la requête effectuée (ça ne concerne qu'un seul enregistrement à la fois), je puisse tourner une boucle qui m'affiche "Nom: valeur" pour chaque "Nom" dont "valeur" est non nul...
d'autant que ça m'oblige, dans la query, à nommer les éléments, ce que je voudrais qui se fasse seul...
exemple, si j'ajoute une colonne à la table, il faut que pour tout produit pour lequel j'affiche la page, cette nouvelle colonne s'affiche (nom + contenu)...
Il faudrait qu'après la requête effectuée (ça ne concerne qu'un seul enregistrement à la fois), je puisse tourner une boucle qui m'affiche "Nom: valeur" pour chaque "Nom" dont "valeur" est non nul...
- chtipepere
- WRInaute impliqué

- Messages: 484
- Inscription: Jeu Jan 08, 2004 16:15
Je pense que la solution doit être là.
Maintenant, pour la construction de la requête, il faudrait la construire dynamiquement en utilisant une classe représentant la structure de la table :
Suivi d'une boucle sur les éléments de la classe (champs de la table) pour construire la requête...
Non?
Maintenant, pour la construction de la requête, il faudrait la construire dynamiquement en utilisant une classe représentant la structure de la table :
- Code: Tout sélectionner
class maclasse
{
var $tablename = 'matable';
var $varlist = array('monchamp1', 'monchamp2' [...]);
[...]
}
Suivi d'une boucle sur les éléments de la classe (champs de la table) pour construire la requête...
Non?
J'ai peut-être une solution, plus du côté de PHP.
Lorsque tu récupères tes résultats, avec un mysql_fetch_assoc(), tu fais un array_filter() sur cet array : sans fonction de callback définie, ça va te virer tous les champs "FALSE" (par exemple, la string vide, l'entier 0, le type NULL, ...). Sinon, tu peux définir toi-même ta propre fonction de callback.
http://fr.php.net/manual/fr/function.array-filter.php
Lorsque tu récupères tes résultats, avec un mysql_fetch_assoc(), tu fais un array_filter() sur cet array : sans fonction de callback définie, ça va te virer tous les champs "FALSE" (par exemple, la string vide, l'entier 0, le type NULL, ...). Sinon, tu peux définir toi-même ta propre fonction de callback.
http://fr.php.net/manual/fr/function.array-filter.php
Wow... là vous êtes trèèès loin, pour moi... j'en suis pas à ce niveau
Bon je vais creuser un peu...
J'avais presque une solution, mais j'ai un bug...
...me donne le résultat suivant:
--> si je peux dégager les '1:, 2:, 3:' c'est bon
Bon je vais creuser un peu...
J'avais presque une solution, mais j'ai un bug...
- Code: Tout sélectionner
$query = "SELECT * FROM `table` WHERE `id` LIKE '$id'";
$result = mysql_query($query,$db);
$list = mysql_fetch_array($result);
$nb_specs = count($list);
$spec_name = array_keys($list);
$spec_data = array_values($list);
for($i=2;$i<$nb_specs;$i++)
{
echo '<br />';
echo $spec_name[$i];
echo ': ';
echo $spec_data[$i];
}
...me donne le résultat suivant:
1: 20 mm
Longueur: 20 mm
2: 120 ml
largeur: 120 ml
3:
hauteur:
4: 5.0 mm
diametre: 5.0 mm
5:
Voltage:
6:
Ampérage:
--> si je peux dégager les '1:, 2:, 3:' c'est bon
-

Joe Le Mort - WRInaute impliqué

- Messages: 255
- Inscription: Mar Aoû 08, 2006 14:13
- Code: Tout sélectionner
$result = mysql_query($query,$db);
$list = mysql_fetch_array($result);
foreach($list as $k => $v){
if (!empty($v)){
echo $k.' = '.$v.'<br />';
}
}
en bcp plus simple !
-

Joe Le Mort - WRInaute impliqué

- Messages: 255
- Inscription: Mar Aoû 08, 2006 14:13
dans ce cas, il faut faire le traitement dans ta requete :
si tu as trop de champs évite de faire cela, ca sera trop long, et lourd.
edit : essaye de faire un echo de ton champs pour savoir si c'est bien vide ou si c'est un espace ou si c'est null
- Code: Tout sélectionner
...
where
tonchamps != 'null' and tonchamps != ''
AND
tonchamps2 != 'null' and tonchamps != ''
si tu as trop de champs évite de faire cela, ca sera trop long, et lourd.
edit : essaye de faire un echo de ton champs pour savoir si c'est bien vide ou si c'est un espace ou si c'est null
Non mais vous êtes tous nazes là !
mysql_fetch_array te crée deux indices pour parcourir tes champs : par associativité avec le nom et par numéro du champ.
Si tu ne veux que les chiffres, tu utilises mysql_fetch_row ; si tu ne veux que les noms des champs, tu utilises mysql_fetch_assoc.
mysql_fetch_array te crée deux indices pour parcourir tes champs : par associativité avec le nom et par numéro du champ.
Si tu ne veux que les chiffres, tu utilises mysql_fetch_row ; si tu ne veux que les noms des champs, tu utilises mysql_fetch_assoc.
Enfin bref, ton code est tout pourri quand même
- Code: Tout sélectionner
$query = "SELECT * FROM `table` WHERE `id` LIKE '".$id."'";
$result = mysql_query($query,$db);
$list = mysql_fetch_assoc($result);
// la prochaine ligne est "facultative" et devrait résoudre ton problème de champs "vides"
$list = array_filter($list);
foreach($list AS $key => $value) {
echo "<br />".$key.": ".$value;
}
Bh@Mp0 a écrit:Non mais vous êtes tous nazes là !
mysql_fetch_array te crée deux indices pour parcourir tes champs : par associativité avec le nom et par numéro du champ.
Si tu ne veux que les chiffres, tu utilises mysql_fetch_row ; si tu ne veux que les noms des champs, tu utilises mysql_fetch_assoc.
Relax CowBoy !!
Pour ma part mon substr() c'est pas terrible. Alors j'ai fait un ptit regex qui devrait marcher sans probleme
- Code: Tout sélectionner
<?php
$chaine = '1: 20 mm';
$pattern = '#(\d+): (\d+) (\w+)#';
$renplacement = '$2 $3';
echo preg_replace($pattern, $renplacement, $chaine);
?>
Mais pour moi les clés viennent du tableau et pas de la table. Enfin, j'ai jamais été tres bon en sql... si tu peux eclairer ma lanterne ?
Bh@Mp0, comme je l'ai indiqué je ne suis pas naze, mais nul à ce niveau et conscient de l'être
Donc ta solution, je ne la comprenais pas.
Maintenant que j'ai un peu plus d'indices, je vais pouvoir tester et te dire ce que ça donne
Donc ta solution, je ne la comprenais pas.
Maintenant que j'ai un peu plus d'indices, je vais pouvoir tester et te dire ce que ça donne
18 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Gestion des langues et des sessions en PHP / MySQL
- Nombre moyen de mots par requête : statistiques AOL Août 2006
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006
- Passage à l'heure d'été/hiver sur un forum phpBB
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Sortie officielle de GoogleStats v2.0 !
- Prise en compte de la mise en page HTML par les moteurs de recherche
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Le WRInaute du moment
- Interview Wikio : transcript du chat WebRankInfo
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités






le forum