array ou varchar ?

array ou varchar ? - PHP - Programmation

Marsh Posté le 23-05-2011 à 17:07:07    

Bonjour à tous!
 
J'ai une table d’articles et je dois créer une autre table de liste de ces articles
Pour l'instant je mémorise cette liste dans un varchar à partir de leur id : 1,5,6,8,10
 
Je suis tombé sur la fonction serialize et je me suis dit que je pourrai passer par des array pour cette liste
 
Qu'elle méthode me conseillez vous?

Reply

Marsh Posté le 23-05-2011 à 17:07:07   

Reply

Marsh Posté le 23-05-2011 à 17:29:27    

Salut, je ne suis  pas certain d'avoir compris, mais je vais tenter de t'expliquer les différents types de champs.
 
Si tu veux stocker des chiffres, il faut utiliser Int ou tinyint, mais en aucun cas varchar réservé aux chaines de caractères.
 
Pour ma part, quand je suis amené à stocker un le contenu d'un tableau dans une bdd, je serialize() le dit tableau dans un champ de type text, c'est pas forcement le top, mais c'est plus souple que varchar si tu es amené à stocker des tableaux contenant beaucoup de données.
 
Voici différents articles qui t'expliqueront plus en détails le pourquoi du comment ;)
 
Choisir le bon type de champ sql - siteduzero.com
 
Si tu veux en savoir plus sur l’optimisation mysql, voici deux articles qui traites le sujet.
Introduction à l'optimisation MYSQL - apprendre-php.com ainsi que Optimiser mysql.
 
Sans oublier l'optimisation des requetes php

Reply

Marsh Posté le 23-05-2011 à 17:31:03    

mais pourquoi ne pas avoir une table de lien ?
(liste_id , article_id)
 
tes requetes sseront plus simples

Message cité 1 fois
Message édité par flo850 le 23-05-2011 à 17:31:39

---------------

Reply

Marsh Posté le 23-05-2011 à 17:37:20    

flo850 a écrit :

mais pourquoi ne pas avoir une table de lien ?
(liste_id , article_id)
 
tes requetes sseront plus simples


 
C'est vrai que je procède déjà comme ça pour les commandes! je sais pas pourquoi j'y ai pas pense
Pour l'instant mes requêtes n'étaient pas complex car il me suffit de faire SELECT .... IN ($liste)
 
Merci
Si personnes n' a d'autre suggestion le sujet est clos  :hello:

Reply

Marsh Posté le 23-05-2011 à 17:43:51    

Euh si en fait, je sais pourquoi j'ai fais ça car ça me permet de modifier cette liste juste avec un input alors qu'avec ta méthode je vois pas commet faire??

Reply

Marsh Posté le 23-05-2011 à 17:52:15    

tu as ton tableau php avec tes id d'article et ton id de liste ( ou l'inverse , c'est pareil)

 
Code :
  1. $liste  = mysql_real_escape_string($liste );
  2. //  1 tu vire les liens existants
  3.  
  4. mysql_query("DELETE FORM article_liste WHERE liste_id = ".$liste)// mieux, tu fais ça avec PDO / requete préparée
  5.  
  6. // 2 tu ajoutes tes liens
  7. foreach($articles as $article){
  8.   $article = mysqlreal_escape_string($article);
  9.   mysql_query("INSERT INTO article_liste(liste_id,article_id) VALUES($liste ,$article)" )// mieux, tu fais ça avec PDO / requete préparée
  10. }

Message cité 1 fois
Message édité par flo850 le 23-05-2011 à 17:52:40

---------------

Reply

Marsh Posté le 23-05-2011 à 18:05:47    

flo850 a écrit :

tu as ton tableau php avec tes id d'article et ton id de liste ( ou l'inverse , c'est pareil)  
 

Code :
  1. $liste  = mysql_real_escape_string($liste );
  2. //  1 tu vire les liens existants
  3.  
  4. mysql_query("DELETE FORM article_liste WHERE liste_id = ".$liste)// mieux, tu fais ça avec PDO / requete préparée
  5.  
  6. // 2 tu ajoutes tes liens
  7. foreach($articles as $article){
  8.   $article = mysqlreal_escape_string($article);
  9.   mysql_query("INSERT INTO article_liste(liste_id,article_id) VALUES($liste ,$article)" )// mieux, tu fais ça avec PDO / requete préparée
  10. }



 
 
 
J'ai l'impression que ça va compliquer tout car pour l'instant j'ai juste ça:
 
id_liste_libre  nom_liste_libre      liste_articles  description_liste_libre       delai_livraison_liste_libre  prix_vente_liste_libre
       
5                    ma lite libre      1,2,3,4,5,6                                            30 jours ouvrés             156
 
 
avec ton système je ne peux plus ajouter de champs unique pour une liste


Message édité par networkinfo le 23-05-2011 à 18:19:37
Reply

Marsh Posté le 24-05-2011 à 12:09:12    

comment ça un champ unique ?  
il te suffit de faire un cle unique sur article_id , liste_id


---------------

Reply

Marsh Posté le 24-05-2011 à 13:00:28    

erf, renseigne toi sur les formes normales.


Message édité par antac le 24-05-2011 à 13:01:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed