Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2415 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  conseil bdd et requetes SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conseil bdd et requetes SQL

n°1679837
redah75
Posté le 31-01-2008 à 15:48:25  profilanswer
 


Bonjour a tous et a toutes :)
 
un petit truc qui me tracasse depuis assez longtemps:
 
j'ai une variable PHP de type tableau, qui contient des identifiant (ca peut aller jusqu a 500 identifiants ou plus).
depuis cette variable, je dois faire une requete sql, et justement là, je me demande comment devrais je proceder!!
 
est il mieux de le faire de cette maniere :
 
foreach($mon_tableau as $id)
{
 SELECT * FROM ma_table WHERE id = '$id'
}
 
ou plutot
 
travailler la variable de maniere a ce que j'ai la requete suivante :
 
SELECT * FROM ma_table WHERE id = '10024' OR id = '11254' OR id = '14524' OR ...
 
 
une derniere question:
j'ai besoin de champs booleen, j'utilise pour cela le type ENUM, mais est il conseille de mettre '0','1' ou plutot 'o','n' ??
 
 
merci de votre aide.
Reda

mood
Publicité
Posté le 31-01-2008 à 15:48:25  profilanswer
 

n°1679851
MagicBuzz
Posté le 31-01-2008 à 15:53:28  profilanswer
 

(en gros)
 

Code :
  1. $sql = "select * from ma_table where id in (".join($mon_tableau, ", " )." )";

n°1679855
MagicBuzz
Posté le 31-01-2008 à 15:55:33  profilanswer
 

pour le type "booléen", peut importe, du moment que c'est spécifié quelque part.
 
généralement, on utilise 0 ou 1, mais c'est quand même mieux quand on as un type "bit".
 
plutôt qu'un ENUM, qui n'est pas du SQL standard, je recommande dans ces cas l'utilisation d'un tinyint (byte) ou même d'un char(1).
quite à rajouter une contrainte sur les valeurs acceptées par le champ, afin de rester standard.

n°1679937
redah75
Posté le 31-01-2008 à 16:52:18  profilanswer
 

Bonjour MagicBuzz et merci pour tes reponses :)
 
wow, je ne connaissais pas 'IN' de SQL :D
pk join et pas implode? est ec plus rapide le join ???
 
concernant le type booleen, g toujours voulu utiliser un char(1), mais je pense que le temps de reponse est plus rapide si c'est un enum ou tinyint. un char(1) est considere come une chaine de caracter et du coup c plus lent. ou je me trompe??? :)

n°1679951
anapajari
s/travail/glanding on hfr/gs;
Posté le 31-01-2008 à 16:57:48  profilanswer
 

question, comment tu alimentes ta:

Citation :

variable PHP de type tableau, qui contient des identifiant (ca peut aller jusqu a 500 identifiants ou plus).

 

A l'instinct je dirais qu'après le in , tu vas apprendre les jointures :o

 
redah75 a écrit :

concernant le type booleen, g toujours voulu utiliser un char(1), mais je pense que le temps de reponse est plus rapide si c'est un enum ou tinyint. un char(1) est considere come une chaine de caracter et du coup c plus lent. ou je me trompe??? :)


Micro-optimisation qui n'en vaut pas le coup ( si elle est avérée, ce dont j'ai tendance à douter)


Message édité par anapajari le 31-01-2008 à 16:59:18

---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1679969
MagicBuzz
Posté le 31-01-2008 à 17:17:55  profilanswer
 

redah75 a écrit :

Bonjour MagicBuzz et merci pour tes reponses :)
 
wow, je ne connaissais pas 'IN' de SQL :D
pk join et pas implode? est ec plus rapide le join ???
 
concernant le type booleen, g toujours voulu utiliser un char(1), mais je pense que le temps de reponse est plus rapide si c'est un enum ou tinyint. un char(1) est considere come une chaine de caracter et du coup c plus lent. ou je me trompe??? :)


pour join vs implode, je ne sais pas, c'est la fonction qui concatène toutes les lignes d'un tableau en les séparant par une chaîne de caractère passée en paramètre. je ne sais pas quel est le nom de la fonction, je ne connais pas pour presque php ;)
 
à mon avis, pour la différence de performances char vs enum, tu te trompes. en toute logique, il n'y a absolument pas de différence mesurable.
et dans le pire des cas, ENUM, qui repose certainement sur un int32 en interne, pourrait bien prendre plus de place et être plus lent.
 
en tout cas, l'aspect performances est à ignorer, car que la différence soit en faveur de l'un ou l'autre, elle sera absolument négligeable.

n°1680007
redah75
Posté le 31-01-2008 à 17:59:00  profilanswer
 

Ah ok, je pensais que l'execution de par ex WHERE active = '1' est plus rapide que WHERE active LIKE 'o' !!

n°1680010
redah75
Posté le 31-01-2008 à 18:01:36  profilanswer
 

anapajari: ma variable type tableau est alimentee comme tout type de tableau. elle contiendra essentiellement les resultats d'une recherche que je souhaite afficher ds une autre page

n°1680012
MagicBuzz
Posté le 31-01-2008 à 18:02:51  profilanswer
 

euh... qui t'as parlé de "like" ?
 
tu peux parfaitement utiliser le signe "=" pour tester une chaine de caractères !
 
(et accessoirement, LIKE sans wildcard, ça fait un =)

n°1680019
redah75
Posté le 31-01-2008 à 18:07:59  profilanswer
 

eh ben, j'apprends des choses aujourd'hui :D
 
g toujours cru que LIKE s'utilise pour les chaine de caracteres et le = pour les numeros...
a quoi sert alors le LIKE mise a part l'utilisation des % ??
c'est quoi un wildcard???  :??:

mood
Publicité
Posté le 31-01-2008 à 18:07:59  profilanswer
 

n°1680022
MagicBuzz
Posté le 31-01-2008 à 18:10:33  profilanswer
 

LIKE, ça sert qu'à l'utilisation des % et %, c'est un wildcard ;)
 
tu peux aussi utiliser ? qui a la même fonction, mais signifie "n'importe quel caractère, une et une seule fois"
 
genre :
 
toto va à la plage
titi va à la plage
tartempion va à la plage
 
select * from matable where phrase like 't?t%'
=> ça retourne que les deux premières lignes.
 
si tu fais
 
select * from matable where phrase like 't%t%'
=> Ca retourne les 3 lignes
 
mais  
 
select * from matable where phrase = 'toto va à la plage'
=> ne retourne que la première ligne, et c'est "infiniment" plus rapide qu'avec un like 'toto%' (vitesse comparable à la recherche d'un nombre, surtout si le champ est indexé)


Message édité par MagicBuzz le 31-01-2008 à 18:11:45
n°1680046
redah75
Posté le 31-01-2008 à 18:50:50  profilanswer
 

ok, merci bp pour ces conseils et informations tres utiles... :)
que serai je devenu sans vous!!! :D

n°1680225
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 10:09:04  profilanswer
 

redah75 a écrit :

anapajari: ma variable type tableau est alimentee comme tout type de tableau.


No kidding ... [:petitpois2]  

redah75 a écrit :

elle contiendra essentiellement les resultats d'une recherche que je souhaite afficher ds une autre page


oui ok mais ça me dit toujours pas comment tu remplis le tableau.
 
Comme je le disais plus haut, à l'instinct, je pense que tu remplis ce tableau avec une autre requête.
Je reste persuadé que tout cela est faisable en une seule :o


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680254
redah75
Posté le 01-02-2008 à 10:46:09  profilanswer
 

anapajari a écrit :


No kidding ... [:petitpois2]  


 

anapajari a écrit :


oui ok mais ça me dit toujours pas comment tu remplis le tableau.
 
Comme je le disais plus haut, à l'instinct, je pense que tu remplis ce tableau avec une autre requête.
Je reste persuadé que tout cela est faisable en une seule :o


 
 
ca depend de ce que je veux faire mais generalement je l'alimente de cette manier:
boucle
{
 $variable[] = $val
}

n°1680276
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 11:05:45  profilanswer
 

[:prozac]
ok laisse tomber ...


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680279
MagicBuzz
Posté le 01-02-2008 à 11:15:05  profilanswer
 

(et $val, il vient d'où ?)

n°1680318
redah75
Posté le 01-02-2008 à 11:46:09  profilanswer
 

hehe, Anapajari, es tu si desespere que ca???? :)
 
je donne un exemple plus clair :
 
$sel = mysql_query("SELECT id FROM table WHERE ma condition..." )
while($res = mysql_fetch_array($sel))
{
 $variable[] = $res[id];
}
 
est ce mieux?? ;)

n°1680332
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 11:53:20  profilanswer
 

\o/ On va arriver à ce que je disais ...
 
donc si je resume tu fais ton truc en 3 étapes:
- une 1ere requete alimente un tableau
- tu itères sur chaque élement de ce tableau
- pour chaque element tu effectues une nouvelle requête avec en paramètre un des elements du tableau.
 
Est-ce bien ça?


---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680364
redah75
Posté le 01-02-2008 à 12:42:09  profilanswer
 

c'est pas vraiment ca!! :D
ce qui se passe c'est que j'ai une page page1.php
dans page1.php, j'ai fait une requete assez compliquee qui m'a permis d'afficher des resultats sur cette page.
dans une autre page: page2.php, je dois afficher les meme resultats, et afin d'eviter de refaire la meme requete qui est compliquee, je transmets en parametre les identifiant qui me permettront d'afficher ces resultats.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  conseil bdd et requetes SQL

 

Sujets relatifs
Page perso...vous demander un conseil...(resolu)[Résolu] Aide requête SQL: item n'appartenant pas à une catégorie
Formatage de colonne SQLQuestion SQL
Les requêtes bookmarquéesRequête SQL + Opération sur Timestamp
[RESOLU][Oracle - SQL] Problème parsing xmlSQL - Recherche mot dans une table ?
Lire et écrire dans une base de données SQL via Excel[Access - SQL] Count sur plusieurs tables
Plus de sujets relatifs à : conseil bdd et requetes SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR