| coker T : y = f'(a)(x-a) + f(a) Profil : Top Penguin | Reprise du message précédent : c'est bon ça marche, j'avais sans faire exprès mis deux fois
par contre, ma popup avec mon span ne marche plus Message édité par coker le 06-01-2009 à 18:50:33 ---------------

| |
lorien Profil : Penguin | coker voici une "petite" (énorme en fait ) optimisation de ta requête sql pour les news...
premièrement tu vas à l'envers. tu ne dois pas associer un tag de ta table tags à un article mais associer à un articles tout les tags qui lui sont associé ensuite à l'aide d'une "simple" (ou pas) jointure tu récupère le tout.
Donc voila ce que je te conseille :
table : tags
champs :
id,
nom,
...
table : articles
champs :
id,
titre,
tags,
...
Dans le champ tags de ta base articles, mets pour chaque tag qui est associé id, par exemple si ton articles est associé aux tags 1,3 et 5 alors ton champ sera rempli ainsi : 1,3,5
Pour commencer on va faire pas à pas histoire que tu comprenne la requête :
Code :
- SELECT
- articles.id,
- articles.titre,
- tags.nom,
- ...
- FROM
- articles
- LEFT JOIN
- tags
- ON
- articles.tags LIKE CONCAT( tags.id, ',%' )
- OR
- articles.tags LIKE CONCAT( '%,', tags.id, ',%' )
- OR
- articles.tags LIKE CONCAT( '%,', tags.id )
|
Ok alors j'explique. le début c'est assez simple on spécifie juste la table ou on va chercher les champs au cas ou il y aurait des noms de champ ambigus (id par exemple).
LEFT JOIN c'est la jointure on dit que on peut aller chercher des champs dans la table tags (le left veut dire que si on trouve pas de réponse à notre requête dans la table tags on affiche quand meme le résultat)
ON on spécifie la condition de la jointure : on veut que l'id de notre tag se retrouve dans le champ tags. on utilise donc le % pour remplacer un ou plusieurs caracteres. il y a 3 possibilité le tag est le premier de la liste et a ce moment il est suivi d'une , et precédé de rien ou alors c'est pas le premier et il est forcément précédé ET suivi d'un virgule ou alors c'est le dernier et il est précédé d'une virgule et suivi par rien.
Si tu lance cette requête tu vas recevoir plein de réponse en fait pour chaque articles tu recevras autant d'enregistrement que tu as de tags dans ton champ tag. Il faut donc regrouper pour ca. Et pour cela rien de mieux que GROUP BY...
Donc on ajoute un petit GROUP BY articles.id pour réduire ca. En faisant cela, on perd tous les noms de tags sauf 1 donc on est pas bien avancé heureusement que Dieu a inventé les fonctions d'agrégats... kézako? les fonctions d'agrégats sont des fonctions qui s'utilisent sur des groupes crée par un GROUP BY...
Celle qui nous intéresse c'est celle la : GROUP_CONCAT( champ ORDER BY champ SEPARATOR 'monSeparateur')
On peut donc faire notre requête finale :
Code :
- SELECT
- articles.id,
- articles.titre,
- GROUP_CONCAT( tags.nom ORDER BY tags.id SEPARATOR ',') as tag,
- ...
- FROM
- articles
- LEFT JOIN
- tags
- ON
- articles.tags LIKE CONCAT( tags.id, ',%' )
- OR
- articles.tags LIKE CONCAT( '%,', tags.id, ',%' )
- OR
- articles.tags LIKE CONCAT( '%,', tags.id )
- GROUP BY
- articles.id
|
Après il te suffit d'un mysql_fetch_array/assoc/object pour récupérer le champ tag qui contient ben tous les tags associés à ton article :
Code :
- $sql = "cf. plus haut";
- $result = mysql_query ( $sql );
- for ( $a = 0 ; $rows = mysql_fetch_assoc ( $result ) ; $a++ ) {
- $articles [ $a ] [ 'tags' ] = explode ( ',', $rows [ 'tags' ] );
- ...
- }
|
et le tour est joué en, eh oui c'est dur a y croire mais..., 1 seule et unique requête... ton server te dira merci  | |
Fixxx Profil : Penguin Pro | Tres bien vu lorien, et bien explique, j'ai appris quelques nouveaux trucs en plus!
Coker, tu parles de quel popup? | |
lorien Profil : Penguin | @Fixxx : le truc le plus important à comprendre là dedans c'est que ça sert à rien de vouloir tout faire avec php... sql est un langage extrêmement puissant et simple d'utilisation. Alors autant en profiter et éviter des requêtes à répétition auprès du server mysql. | |
coker T : y = f'(a)(x-a) + f(a) Profil : Top Penguin | merci lorien, je vais voir ça ce weekend, un peu occupé ce soir je posterais si j'ai un problème Fixxx, je parle de la popup avec le span EDIT : je ne savais pas que SQL était un langage aussi puissant Message édité par coker le 09-01-2009 à 18:12:55 ---------------

| |
JeanGuy Profil : New Penguin | Je me demandais si vous connaissiez des sites proposant des thèmes et skins en asp.net. Parce que je trouve pas grand chose.
Sinon des templates afin de m'inspirer parce que je suis vraiment null en design. Je fais le fonctionnel et j'aimerais aussi apprendre à faire du beau et pratique. | |
cerium 1+1 = 42 Profil : Penguin Pro | En asp.net ? C'est pas un langage de programmation coté serveur ? Les thèmes c'est en xHtml/CSS qu'il faut que tu cherches  ---------------
twitter.com/Ipsudum
| |
JeanGuy Profil : New Penguin | En fait quand tu développes un site en asp.net tu réalises la plupart du temps une architecture n tiers. L'interface est composée de plusieurs parties, le(s) CSS pour le code xHtml (les divs etc composant la masterpage(template du site)), quand au composant asp tel que par exemple les texbox et les labels etc tu défini leur style dans un fichier skin.
Ce fichier skin et les css composent un thème que tu peux définir pour un utilisateur ou plusieurs.
Sinon je demandais ça c'est surtout parce que je ne connais pas de site proposant des idées de css et design que je pourrais réinvestir en css. Cela provient aussi du fait que je ne suis pas super balèze en design. | |
clowniseb Profil : Big Penguin | JeanGuy a écrit :
En fait quand tu développes un site en asp.net tu réalises la plupart du temps une architecture n tiers. L'interface est composée de plusieurs parties, le(s) CSS pour le code xHtml (les divs etc composant la masterpage(template du site)), quand au composant asp tel que par exemple les texbox et les labels etc tu défini leur style dans un fichier skin.
Ce fichier skin et les css composent un thème que tu peux définir pour un utilisateur ou plusieurs.
Sinon je demandais ça c'est surtout parce que je ne connais pas de site proposant des idées de css et design que je pourrais réinvestir en css. Cela provient aussi du fait que je ne suis pas super balèze en design.
|
Bonsoir,
Moi j'ai réalisé un site en ASP.NET pour mon boulot et j'ai aussi utilisé les CSS pour les composants ASP, il te suffit d'attribuer une cssClass à ton élément ASP.
Je ne comprends pas trop ton histoire de fichier skin  | |
JeanGuy Profil : New Penguin | | |
krystof..,- Profil : Big Penguin | Bonsoir,
J'ai un petit problème avec mon nouveau webdesign. Mon Footer a 140px est il ne doit pas devenir plus grand si je n'ai pas assez texte dans le Body pour baisser le footer jusqu'au fin de la page.
J'ai essayé ca:
div#footer {
top: 100%;
margin: -140px;
position: absolute;
}
Mais ca me rend avec une bande blanche sous le footer quand j'ai assez de texte dans le Body.
J'espère que vous pourrez m'aider | |
cerium 1+1 = 42 Profil : Penguin Pro | J'ai pas trop comprit ce qui ai sensé faire 140px (width ou height ?), et s'il y a pas assez de texte, il devrait plutôt ne pas se réduire non ?
Si t'avais un exemple online ça serait sympa Et jette un oeil du coté des min/max-height/width. ---------------
twitter.com/Ipsudum
| |
krystof..,- Profil : Big Penguin | cerium a écrit :
J'ai pas trop comprit ce qui ai sensé faire 140px (width ou height ?), et s'il y a pas assez de texte, il devrait plutôt ne pas se réduire non ?
Si t'avais un exemple online ça serait sympa Et jette un oeil du coté des min/max-height/width.
|
Pardon, mon francais est mauvais
Alors, je n'ai pas d'exemple online mais je fais un petit screenshot.
Voici mon HTML:
Code :
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" encoding="utf-8">
- <head>
- <title>Haustech Klima</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
- <link href="style.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <div id="top">
- <div id="topcontent">
- Top
- </div>
- </div>
- <div id="seperator1">
- </div>
- <div id="header">
- <div id="headerbg"><img src="img/logo.png"></div>
- <div id="headercontent">
- </div>
- </div>
- <div id="seperator2">
- </div>
- <div id="seperator3">
- </div>
- <div id="slogan">
- <div id="sloganbg"></div>
- <div id="slogancontent">
- Slogan
- </div>
- </div>
- <div id="seperator4">
- </div>
- <div id="content">
- <div id="contentalign">
- <div id="contentheader">
- Header
- </div>
- <div id="contenttext">
- Text
- </div>
- </div>
- </div>
- <div id="seperator5">
- </div>
- <div id="footer">
- <div id="footerbg"></div>
- <div id="footercontent">
- Footer
- </div>
- </div>
- </body>
- </html>
|
Et alors mon CSS:
En espérant que ca t'aide  Message édité par krystof..,- le 05-02-2009 à 22:11:22
| |
cerium 1+1 = 42 Profil : Penguin Pro | A mon avis il faut faire une meilleur base
- Pourquoi tout positionner en absolute, au lieu de laisser les les éléments se placer dans le flux de la page ?
- Pourquoi créer des <div></div> que tu fermes aussitôt ? Pourquoi ne pas directement styler la vraie div ?!
Bref essaie de repartir sur des bases plus saines je pense Sinon regarde du coté des tes margin/padding, en jouant avec... ---------------
twitter.com/Ipsudum
| |
Fixxx Profil : Penguin Pro | Si j'ai bien compris tu veux placer ton footer tout en bas de la page? Essaye position:absolute et bottom:0px Sinon je suis d'accord avec Cerium, repart sur des bases plus saines  | |
krystof..,- Profil : Big Penguin | Merci, alors mon CSS n'est pas bon mais c'est juste un début.
Je vais essayer bottom: 0px;, j'espère que ca marche. | |
cerium 1+1 = 42 Profil : Penguin Pro | | |
krystof..,- Profil : Big Penguin |
Je peux seulement devenir mieux | |
coker T : y = f'(a)(x-a) + f(a) Profil : Top Penguin | bonjour c'est encore moi, me remettant à mon proje de CMS eBlog, je pense que l'amélioration majeure est un système pour avoir les articles listés sur plusieurs pages, donc j'ai trouver un tuto (en quelque sorte) http://www.phpdebutant.org/article84.php mais je ne comprend pas certains passages
Code :
- $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
- mysql_select_db($db) or die ('Erreur :'.mysql_error());
|
pourquoi faire ça comme ça? Code :
- $path_parts = pathinfo($_SERVER['PHP_SELF']);
- $page = $path_parts['basename'];
|
A quoi ça sert, je ne saisis pas l'intérêt Code :
- $select = 'SELECT count(id) FROM vaches';
- $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
- $row = mysql_fetch_row($result);
- $total = $row[0];
|
et de même pour tout ce passage (les requetes SQL me paraissent pas correct, enfin, je ne les fais pas comme ça pour ma part) merci à vous EDIT : après un temps de recherche, j'ai pu trouer un code que j'ai modifié à ma guise ---------------

| |
lorien Profil : Penguin | coker a écrit :
Code :
- $path_parts = pathinfo($_SERVER['PHP_SELF']);
- $page = $path_parts['basename'];
|
A quoi ça sert, je ne saisis pas l'intérêt
|
phpinfo te permet d'obtenir des infos sur le fichier spécifié en argument dans un tableau associatif :
dirname répertoire du fichier
basename nom du fichier (avec extension)
extension extension du fichier
filename nom du fichier (sans extension)
donc avec $_SERVER[ 'PHP_SELF' ] tu te renseigne sur le fichier courant. ca peut être utile dans un include ou pour avoir l'url si tu veux que ton code soit portable.
coker a écrit :
Code :
- $select = 'SELECT count(id) FROM vaches';
- $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
- $row = mysql_fetch_row($result);
- $total = $row[0];
|
et de même pour tout ce passage (les requetes SQL me paraissent pas correct, enfin, je ne les fais pas comme ça pour ma part)
|
ca par contre c'est un peu le truc inutile... la requête est correcte elle compte juste le nombre de lignes dans la base de donnée c'est inutile à mon avis parce que on a que ca... si on veut le reste faut refaire une requête alors qu'on pourrait tout faire en même temps... faut voir le contexte.
pour le mysql_query( $select, $link ); le $link est facultatif. si tu ne mets rien, cela utilise la dernière connexion avec la bdd que tu as ouverte sinon si tu as plusieurs connections ben ca te permet de choisir laquelle tu veux.
sinon le mysql_fetch_array c'est ne autre anti-optimisation. cela crée un tableau associatif et numérique en même temps. en gros avec une requête comme celle la :
Code :
- SELECT count(id) as nbre, id,... FROM ma_table
|
tu obtiens :
Array
{
[ 0 ] => nbre,
[ 'nbre' ] => nbre,
[ 1 ] => id,
[ 'id' ] => id,
...
}
tu as tout à double... mieux vaut utiliser mysql_fetch_assoc (qui crée uniquement le tableau associatif) ou mysql_fetch_object (qui crée un objet avec les champs comme propriétés)
| |
coker T : y = f'(a)(x-a) + f(a) Profil : Top Penguin | Bonjour
j'ai encore besoin de votre aide, je vous explique, j'ai une BDD, j'aimerais afficher mes résultat dans un tableau html, 3 résultats par ligne, mais je ne vois pas comment faire, car si je met le boucle avant <tr> et que je la ferme après </tr> il va me recréer une ligne par résultat
merci de votre aide a+ ---------------

| |
lorien Profil : Penguin | une fois que tu as mis tes résultats dans un tableau $results tu fais :
Code :
- $tableau = '';
- $a = 0;
- foreach( $results as $result ){
- //Si ton resultat est le num 0, 3, 6, 9,...
- if( $a % 3 == 0 ) {
- $tableau .= '<tr>';
- }
- $tableau .= "<td>$result</td>";
- //Si c'est le 2, 5, 8,... ou le dernier (pas grave si tu as pas 3 <td></td> dans la derniere ligne)
- if( $a % 3 == 2 || $a == count( $results ) - 1 ) {
- $tableau .= '</tr>';
- }
- $a++;
- }
|
| |
coker T : y = f'(a)(x-a) + f(a) Profil : Top Penguin | ça ne marche pas :s ---------------

| |
lorien Profil : Penguin | tu fais bien un echo avec $tableau apres? sinon des erreur? ca te fais rien du tout ou quand même quelque chose? développe un peu.. ^^ | |
Komm Profil : Penguin Pro | Hello,
Je viens vers vous car j'ai un petit problème avec mon script php...
J'essaie de générer toutes les pages de mon site d'un coup à partir d'un fichier page.php
Il faut donc que je récupère le contenu du fichier page.php?id=$id
Car je transmet la variable id par la méthode GET...
j'ai essayé ça mais ça ne marche pas...
Code :
- $page = file_get_contents('page.php?id='.$donnees2['id']);
|
Quelqu'un a une idée?
Merci beaucoup!! ---------------
Mon Flickr
c2prods.com
The Unnamed Studios : Webdesign
| |
Fixxx Profil : Penguin Pro | Bah, ca depend un peu de ce que tu veux faire... Si tu veux juste qu'on utilise page.php comme pivot pour nous orienter vers d'autres pages du site, un simple include() suffit.
Sinon je ne sais pas exactement pourquoi ca ne marche pas. Il y a une erreur qui survient, ou juste rien qui ne s'affiche? | |
| |