Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 14h43   #1
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Par défaut split d'une chaine ce caractères

Bonjour,

est ce qu'il y a un moyen pour faire un split d'une chaine de caractères en fonction d'un caractère donné (un tiret '-' par exemple) avec SQL ?
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h46   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
pour avoir un bout par ligne ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h47   #3
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par stealth35 Voir le message
pour avoir un bout par ligne ?
pour avoir un bout, c'est tout.
par exemple, si ma chaine de caractère est 'a-b-c-d', je veux avoir le résultat a tout seul, b tout seul, etc..
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h51   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par ROUGE87 Voir le message
pour avoir un bout, c'est tout.
par exemple, si ma chaine de caractère est 'a-b-c-d', je veux avoir le résultat a tout seul, b tout seul, etc..
je comprend bien mais, ligne par ligne ?

Code :
1
2
3
4
5
6
table
-----
a
b
c
d
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h56   #5
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par stealth35 Voir le message
je comprend bien mais, ligne par ligne ?

Code :
1
2
3
4
5
6
table
-----
a
b
c
d
ca ne me dérange pas ligne par ligne ou pas, car ce n'est qu'un moyen pour moi pour mettre le résultat dans le where de ma requete. Par exemple, une requete du genre :
Code :
1
2
3
 
SELECT * FROM Table
where name = a
moi je veux que le a soit le résultat d'un split du string d'origine.
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h59   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
si tu veux faire une recherche du type "monchamp de la forme 'a' ou 'b' ou 'c' ou 'd'" :
Code :
1
2
3
4
5
6
<?php
$machaine 	= 'a-b-c-d';
$in_chaine	= str_replace('-',',',$machaine); // -> de la forme a,b,c,d
// la requete
$requete	= "SELECT ......... WHERE monchamp IN (".$in_chaine.");";
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h01   #7
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par jreaux62 Voir le message
Bonjour,
si tu veux faire une recherche du type "monchamp de la forme 'a' ou 'b' ou 'c' ou 'd'" :
Code :
1
2
3
4
5
6
<?php
$machaine 	= 'a-b-c-d';
$in_chaine	= str_replace('-',',',$machaine); // -> de la forme a,b,c,d
// la requete
$requete	= "SELECT ......... WHERE monchamp IN (".$in_chaine.");";
?>
Mais apparemment, ce n'est pas ce que tu veux ...
Merci pour la réponse mais c'est pas vraiment ce que je veux.. le dernier post explique bien ce que je veux.
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h04   #8
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Si tu veux des resultats séparés :
Code :
1
2
3
4
5
6
7
8
9
<?php
$machaine 	= 'a-b-c-d';
$bouts_chaine	= explode('-',$machaine); // -> array des bouts de chaine
// les requetes successives
for ($i=0; $i<sizeof($bouts_chaine); $i++) {
	$requete	= "SELECT ......... WHERE monchamp = '".$bouts_chaine[$i]."';";
	// ...
}
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h08   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par jreaux62 Voir le message
for ($i=0; $i<sizeof($bouts_chaine); $i++) {
[/code]
foreach plutôt, de plus sizeof est un alias, et est appelé a chaque tour de boucle
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h26   #10
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par jreaux62 Voir le message
Si tu veux des resultats séparés :
Code :
1
2
3
4
5
6
7
8
9
<?php
$machaine 	= 'a-b-c-d';
$bouts_chaine	= explode('-',$machaine); // -> array des bouts de chaine
// les requetes successives
for ($i=0; $i<sizeof($bouts_chaine); $i++) {
	$requete	= "SELECT ......... WHERE monchamp = '".$bouts_chaine[$i]."';";
	// ...
}
?>
sans la boucle for, je voudrais toujours récupérer uniquement le premier bout ou le second ou le troisème (dans le sens que je connais toujours la position de la partie à récupérer.
Si je suis ton code, pourquoi un simple
Code :
explode('-',$machaine)[1]
ne marche pas ?
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h31   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
normale, faut le faire une variable le [1]
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h41   #12
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par stealth35 Voir le message
normale, faut le faire une variable le [1]
J'ai pas bien saisi ce que tu voulais me dire
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h46   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par ROUGE87 Voir le message
J'ai pas bien saisi ce que tu voulais me dire
Code :
1
2
$vars = explode('-',$machaine);
echo $vars[1];
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h49   #14
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par stealth35 Voir le message
Code :
1
2
$vars = explode('-',$machaine);
echo $vars[1];
j'ai cette erreur :

Code :
1
2
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$vars = explode('-', $machaine)' at line 1
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h51   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
c'est pas mettre dans ta requete SQL ça...
montre tout ton code
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h57   #16
Membre du Club
 
Inscription : février 2011
Messages : 90
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 90
Points : 50
Points : 50
Citation:
Envoyé par stealth35 Voir le message
c'est pas mettre dans ta requete SQL ça...
montre tout ton code
voici ma requête qui marche bien avec des substring :
Code :
1
2
SELECT * FROM TABLE 
WHERE category = SUBSTRING('7-MP1-1-CD1-1',1,LOCATE('-', '7-MP1-1-CD1-1')-1)
je voudrais éviter les substring (et surtout les substring imbriqués) pour pouvoir faire une requête propre.
ROUGE87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h31.


 
 
 
 
Partenaires

Hébergement Web