conseil bdd et requetes SQL - SQL/NoSQL - Programmation
Marsh Posté le 31-01-2008 à 15:55:33
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.
Marsh Posté le 31-01-2008 à 16:52:18
Bonjour MagicBuzz et merci pour tes reponses
wow, je ne connaissais pas 'IN' de SQL
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???
Marsh Posté le 31-01-2008 à 16:57:48
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
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)
Marsh Posté le 31-01-2008 à 17:17:55
redah75 a écrit : Bonjour MagicBuzz et merci pour tes reponses |
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.
Marsh Posté le 31-01-2008 à 17:59:00
Ah ok, je pensais que l'execution de par ex WHERE active = '1' est plus rapide que WHERE active LIKE 'o' !!
Marsh Posté le 31-01-2008 à 18:01:36
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
Marsh Posté le 31-01-2008 à 18:02:51
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 =)
Marsh Posté le 31-01-2008 à 18:07:59
eh ben, j'apprends des choses aujourd'hui
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???
Marsh Posté le 31-01-2008 à 18:10:33
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é)
Marsh Posté le 31-01-2008 à 18:50:50
ok, merci bp pour ces conseils et informations tres utiles...
que serai je devenu sans vous!!!
Marsh Posté le 01-02-2008 à 10:09:04
redah75 a écrit : anapajari: ma variable type tableau est alimentee comme tout type de tableau. |
No kidding ...
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
Marsh Posté le 01-02-2008 à 10:46:09
anapajari a écrit : |
anapajari a écrit : |
ca depend de ce que je veux faire mais generalement je l'alimente de cette manier:
boucle
{
$variable[] = $val
}
Marsh Posté le 01-02-2008 à 11:05:45
ok laisse tomber ...
Marsh Posté le 01-02-2008 à 11:46:09
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??
Marsh Posté le 01-02-2008 à 11:53:20
\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?
Marsh Posté le 01-02-2008 à 12:42:09
c'est pas vraiment ca!!
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.
Marsh Posté le 31-01-2008 à 15:48:25
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