Aller au contenu

Sarc

Hubmaster
  • Compteur de contenus

    2 332
  • Inscrit(e) le

  • Dernière visite

Messages postés par Sarc

  1. Sur la première condition (du OR), il y a une relation 1-n, mais en effet, prise à part, cette requête est rapide. Sur la deuxième condition du OR, je récupère exactement le même type d'objets, mais je n'ai aucune condition sur b... Et comme je ne sélectionne aucun champ du b, je ne pensais pas qu'il faisait tous les tuples possibles quand même.

    En fait, la première condition vérifie qu'un champ existe dans le b, et la deuxième n'a pas besoin de vérifier parce que j'ai déjà le champ qui me va dans a. Difficile à expliquer comme ça, mais c'est l'idée.

    Ma question, maintenant, c'est pourquoi un SGBD est pas foutu de comprendre que "SELECT a.champ FROM table a, table2 b WHERE a.id=truc" est équivalent à "SELECT a.champ FROM table a WHERE a.id=truc" ?

    Ça me paraît incohérent.

  2. Bon bah je me réponds à moi-même, juste après avoir posté, j'ai testé un truc : séparer ma requête en deux requêtes. La première condition (ci-dessous) semble faire monter en exponentiel le temps de calcul, pour une raison que j'ignore...

    (
    b.champ2 = 53
    AND b.champ = a.champ
    AND b.champ3 = 1
    )
    OR (
    a.champ = 53
    )

    Si d'aucuns ont une idée de pourquoi, en théorie quantique des SGBD, cette condition idiote ralentit à ce point la requête... En séparant en deux requêtes, je peux descendre à quelques millisecondes maximum...

  3. Bonjour à tous,

    J'ai une requête qui me pose problème : 4 secondes pour être exécutée ! :(

     SELECT DISTINCT
    SQL_CALC_FOUND_ROWS a.pleindechamps, c.dautrechamps
    FROM matab a, matab2 b
    WHERE (
    (
    b.champ2 = 53
    AND b.champ = a.champ
    AND b.champ3 = 1
    )
    OR (
    a.champ = 53
    )
    )
    ORDER BY a.date DESC
    LIMIT 0 , 15

    Les cardinalités des deux tables sont de l'ordre de quelques milliers. Apparemment, il n'arriverait pas à optimiser son algorithme pour s'éviter de toutes les parcourir, et donc il a quelques millions de tuples à parcourir...

    En virant l'order by et le SQL_CALC_FOUND_ROWS, le problème est résolu.

    Je me dis que j'ai peut-être mal foutu mes index, et que je n'ai pas trop aidé le serveur SQL, mais j'ai du mal à voir où ça bloque... J'ai un index sur (champ2, champ) mais ça ne lui simplifie pas la vie..

    Avez-vous des idées de pistes à explorer ?

  4. Culturec, tu as de la chance d'avoir des "plus conservateurs". Je ne vous raconte pas la galère pour continuer de faire vivre Fun-Ados ! Un forum généraliste pour adolescents, c'est juste une énorme tare. Certains s'en sortent encore, parce qu'ils bénéficiaient d'un trafic plus fort que moi dès la base, mais moi, j'ai l'impression que le site survit. La demande de sites spécialisés adolescents est forte (vu le nombre d'inscriptions), mais se centrer autour du forum n'est plus une bonne solution, je le remarque tous les jours.

    J'avais essayé de théoriser un peu la dynamique du web dans les années. Les forums marchaient en effet à une certaine époque où les moteurs de recherche ne faisaient pas nécessairement bien leur boulot. Ensuite, Arlette l'a parlé, il y a une individualisation du net : créer son blog est devenu simple, les gens s'y sont mis, ils voulaient eux aussi être sous la lumière, pas seulement un pion du forum.

    Ce phénomène a été ultra-amplifié avec les réseaux sociaux à la Facebook. Sur Facebook, la page principale n'est pas l'index du forum, n'est pas la page d'accueil du site, non, c'est son profil ! On EST le site, sur Facebook. Et ça, les gens aiment. Ils vivent le site en étant le noyau central, et en choisissant le contenu qui nous entoure.

    L'enjeu maintenant, c'est de faire des sites dont le visiteurs est le rédacteur en chef, et que sa page principale soit sa propre page, qu'il aura créée de toute pièce... mais sans nécessairement ressembler à Facebook. Ce qui est un véritable défi (que je n'arrive pour l'instant pas à prendre en compte).

    Enfin bref, tout ça pour dire que Fun-Ados, c'est pas la joie.

  5. Bonjour,

    Je contrasterai avec les histoires de Pape de Dudu. En effet, tu as raison dans ton deuxième message, il faut utiliser un "mais pas si" dans ton premier if. Sache que les deux connecteurs logiques hyper-utiles dans la vie (électronique, informatique, etc.) sont le ET et le OU.

    Si je comprends bien ton code, tu veux :

    - pour afficher le premier lien, que $ad_display soit à "live" ET que $search_url soit vide ? remarque mon ET dans ma phrase !

    Le code exact est donc :

    if(($ad_display == 'live') AND (empty($search_url)))

    Ensuite, pour afficher le deuxième lien, il faut en effet le faire après la sortie du if (c'est là que le Pape euuh Dudu a raison.

    Ta structure globale est donc :

    if(($ad_display == 'live') AND (empty($search_url)))
    {
    // J'affiche mon premier lien
    }
    elseif(!empty($search_url))
    {
    // J'affiche mon deuxième lien
    }

    Là, ton œil observateur se dit : "mais pourquoi il met elseif à la place de if ?", eh bien je réponds "pour l'optimisation !".

    En effet, le elseif permet de ne vérifier la condition que si le if d'avant n'a pas été vérifié. Si tu mets if, le programme calculera à chaque fois si $search_url est vide. Avec le elseif, il ne vérifiera que le $search_url est vide uniquement si la condition (($ad_display == 'live') AND (empty($search_url)) n'avait pas été vérifiée.

    (Je suis pas clair, mais j'y arrive pas le dimanche matin).

  6. Bonjour,

    J'ai une question très bête qui me turlupine depuis quelques jours. Est-ce qu'un actionnaire d'une boîte peut y travailler sans obtenir de salaire ? Quand on crée une SARL, on peut décider de ne pas se verser de salaire, et pourtant, on bosse bien dedans, donc je pense que oui... Mais si l'entreprise a plein de salariés, un patron, etc, et que je suis actionnaire, est-ce que je peux offrir gracieusement de mon temps pour la boîte, en lui créant un site, ou en faisant le standard téléphonique, qu'importe ?

    Merci d'avance de vos réponses :D

  7. Jacques,

    Il veut que si les visiteurs uploadent un fichier PHP, ils ne puissent pas l'exécuter directement sur le serveur... Parce que si le fichier uploadé monattaque.php est dans un dossier et qu'en allant sur la page pour le télécharger, il est exécuté par le serveur au lieu d'être téléchargé, ça pourrait être préjudiciable.

    Après, je n'ai pas fait de tests, moi, donc je sais pas si c'est faisable réellement ou pas, comme "attaque".

    je test a l'instant et je te dis quoi.

    Alors, comme ça, dans "Bienvenue chez les Ch'tits", il n'y aurait pas que des clichés ? :P

    Dans ta signature, se sont tes sites ?

    Je t'ai envoyé un MP, pour ne pas partir sur tous les sujets...

  8. En fonction des identifiants déjà existants ou supprimés, il détermine le prochain numéro à attribuer pour l'enregistrement.

    A vrai dire, avec tous les MySQL que je connais, il ne prend pas en compte les supprimés... Juste les créés ! Si tu supprimes l'id 43, il ne sera pas remplacé, et l'auto-increment ira directement au 44... Si tu crées manuellement le numéro 155, il mettra l'auto-increment à 156.

    (N'hésite pas à me contredire si je me trompe grossièrement).

  9. Bonjour,

    Pour ce genre de problèmes de programmation, il est mieux de placer les sujets dans "Les langages du net", la section navigateurs est plutôt pour les soucis liés à l'utilisation des navigateurs que pour les problèmes d'affichage inhérents à la programmation.

    J'ai une erreur dans Chrome :

    Uncaught ReferenceError: initMenu is not defined

    A mon avis, au lieu de mettre ça dans ton code HTML :

        <script type="text/javascript"> 
    initMenu();
    </script>

    Il vaudrait mieux que tu enlèves le commentaires dans le javascript de ton menu :

    // window.onload=initMenu;

    A voir si ça va mieux marcher !

  10. Bonjour,

    Tu as des valeurs par défaut dans ta base de données. Donc quand tu la remplis, si rien n'avait été spécifié par l'utilisateur, les champs auront quand même une valeur, soit "www", soit "www.myspace.com", etc. Pour ne pas avoir ce phénomène, il faut que tu modifies la structure de ta base de données et que tu mettes dans la colonne "default" des valeurs vides " " pour ces éléments.

  11. Bonjour,

    Que veux-tu dire par "aussi bien" ? Je suppose qu'ils envoient des mails en HTML. L'enjeu est de bien utiliser les règles CSS pour qu'elles soient appliquées par les différents webmails et clients mails, ce qui n'est pas aisé du tout.

    Tu peux t'intéresser à quelques articles qui expliquent ces soucis :

    CSS Email, sur Pompage

    Emails HTML, dompter la bête, toujours sur Pompage

    Guide to CSS support in email clients, sur Campaign Monitor

    Ce que tu peux faire aussi, c'est d'analyser le code source des newsletters que tu aimes bien. C'est instructif ;)

  12. As-tu besoin de cette adresse pour y accéder ou pour l'afficher ? Parce que si c'est juste pour y accéder, tu peux te permettre d'avoir l'adresse www.monsite.com/rep/../rep2/fichier.html", qui marche sous Linux.

    Si tu veux l'afficher, tu peux partir de la même forme et d'appliquer la fonction "trouver /$1/../ et remplacer par /". Je n'ai pas trouvé de fonction propre qui te donnerait une absolue à partir d'une relative...

    Tu veux une gestion des erreurs ?

  13. Ce qui est en mauve indique le padding de ton élément parent : c'est donc un espace que tu peux modifier à ta guise dans le CSS. Il suffit de cliquer sur ton élément où il y a du mauve, et chercher à droite le CSS qui s'applique à lui. Tu trouveras un padding-top de 35px. Si tu baisses cette valeur, tes boutons remonteront. Mais ton image de voiture aussi remontera ! Si tu veux qu'elle reste à la même hauteur, il faudra lui appliquer à elle une marge supérieure margin-top.

  14. Alors, pour commencer : si tu es avec Firefox, télécharge Firebug, qui te permet de regarder tous les éléments de ton code, et où ils se situent. Tu comprendrais avec que c'est la marge de gauche sur ton <ul> qui est BIIIIEN trop grand. Si tu le mets à 350px, et que tu fais ce que j'ai dit juste avant, ton élément se placera correctement, comme tu le souhaites.

  15. Bonjour,

    Il faut que tu mettes ton div ExtraContainer à l'intérieur de ton div containerTop, pour commencer. En effet, ces deux images seront liées à ce div pour leur placement. Ca modifiera déjà totalement les choses, tu verras.

    Après, tu peux jouer soit avec le float, soit avec du position:absolute, soit avec du position:relative. Toutes les solutions sont possibles !

  16. C'est décidé, mon nouveau rêve est d'ouvrir une vraie école de création Internet.

    Concernant ce que tu viens d'envoyer :

    1. Apprendre de l'Internet à distance, mouais.

    2. Aucune référence au CSS dans le programme : c'est compris dans HTML ou c'est juste oublié ou inséré uniquement avec Dreamweaver ?

    3. Cinq chapitres sur Dreamweaver, ou "comment autoriser un débutant à utiliser des outils qui dégraderont ses créations"

    4. Effectivement, c'est dense, et même à temps plein, je suis pas sûr qu'on soit un crack en sortant de la formation

    Après, c'est sûr que ça te sert tout sur un plateau, mais il faut se méfier : j'ai connu des cours de HTML avec toutes les balises en majuscule et des attributs sortis de l'au-delà.

×
×
  • Créer...