Vous n'êtes pas identifié(e).
Bonjour,
Je viens demander à l'aide !!!
J'ai un souci pour lequel je n'ai pas vraiment d'idée de résolutions.
J'ai donc deux tables différentes contenant toutes les deux des poèmes:
- Une table poesieetpeinture (champs: id, titre, poeme, auteur, datepoeme,...)
- Une table themedumois (champs: id, titre, poeme, auteur, datedupoeme, ...)
J'aimerais afficher les 10 derniers poèmes reçus quelque soit la table de laquelle ils proviennent:
par exemple on pourrait avoir le 5 premiers poèmes viennet de poesieetpeinture, puis 3 de themedumois, puis 2 de poesieetpeinture
Pour chaque résultat, il faut que l'url de redirection vers le poème soit différente :
pour les résultats de poesieetpeinture, l'url sera plpoeme.php?id=, et pour themedumois, l'url ser tdmpoeme.php?id=
Pour le moment je suis capable de faire les deux requetes séparement et de les afficher séparément, mais impossible de les afficher dans un seul tableau.
MERCI POUR VOS CONSEILS
Eric
Hors ligne
Hello,
Je suis pas spécialiste SQL mais est ce que quelque chose comme ça ne ferait pas l'affaire ?
/me se demande vraiment si ca va marcher... :\
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Au niveau de la requête je pense avoir à peu près trouvé, mais le problème c'est que je n'arrive pas à différencier l'url en fonction de la provenance de la table
(SELECT id,titre,poeme,auteur,datepoeme,valid
FROM poesieetpeinture
WHERE valid=1
ORDER by datepoeme DESC
LIMIT 7)
UNION
(SELECT id,titre,poeme,auteur,datedupoeme,valid
FROM themedumois
WHERE valid=1
ORDER by datedupoeme DESC
LIMIT 7)
ORDER by datepoeme DESC
Hors ligne
Hello,
Essaye comme ça :
Et après tu fais un test sur la colonne 'provenance'
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Saluton kaj bonan novjaron,
Je ne crois pas que MySQL supporte la clause LIMIT dans les sous-requêtes, et surtout, par rapport au poste initial, pourquoi LIMIT 7 ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Saluton kaj bonan novjaron,
Je ne crois pas que MySQL supporte la clause LIMIT dans les sous-requêtes, et surtout, par rapport au poste initial, pourquoi LIMIT 7 ?
Pour être franc je ne sais pas non plus et en plus en ce moment je suis sous oracle donc je peux pas tester
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Ouais, au temps pour moi, cette restriction semble dater de versions MySQL 4...
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci maskime,
cette solution marche parfaitement, avec un petit if et else if ensuite, on obtient de très bons résultats...
Hors ligne
Pour ce qui est des limites à l'intérieur des requêtes, c'est que le nombre de résultats pourrait dépasser les 5000 donc elles me sont indispensables, et effectivement cela marche, pas d'erreur Sql
Hors ligne
Hello,
pour les LIMIT on faisait plus référence aux valeurs de ton LIMIT => 7 + 7 = 14 et non 10 comme tu le précise dans ton message de début.
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Ok pour cette remarque, en fait j'ai juste changer d'avis... je suis passé à 14 résultats.
Par contre information pour ceux que ça intéresse, les résultats obtenus sont donc 7 résultats de chaque table classés par date.
Je me demande si en supprimant la clause limit au début et en l'ajoutant après à tout le tableau on obtiendrait surement les derniers 14 résultats (et non moitié, moitié)
Je testerais...
Hors ligne
Hello,
Je pense que si tu supprimes les LIMIT dans tes sous-requêtes et que tu mets un LIMIT 14 à la fin de ton UNION, tu auras les 14 derniers résultats toutes tables confondues.
MySQL ne cherchera pas à te faire un ratio 50/50.
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Par contre la requête sera plus lente car la limitation se fera sur la globalité de l'UNION qui devra donc être d'abord réalisée intégralement.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Par contre la requête sera plus lente car la limitation se fera sur la globalité de l'UNION qui devra donc être d'abord réalisée intégralement.
Il suffit de faire un LIMIT dans les sous-requêtes.
Si le LIMIT de l'union est de 14 alors on fait un LIMIT de 28 dans les sous-requêtes et le tour est joué.
Hors ligne
Il suffit de faire un LIMIT dans les sous-requêtes.
Si le LIMIT de l'union est de 14 alors on fait un LIMIT de 28 dans les sous-requêtes et le tour est joué.
Bizarre ta logique, pourquoi 28 ?
14 dans chaque sous-requête me semble suffisant.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci pour vos propositions et votre aide.
Cela marche parfaitement.
Pour ce qui est des limit... j'ai fait plus compliqué que cela, mais c'est uniquement par rapport aux différentes sections.
Pour chacune des sections j'ai choisi des limit relatives aux nombres d'envoi par jour....
et j'ai même rajouter un deuxième union (avec une autre table), et ça marche parfaitement, j'ai compris le truc je pense....
Merci encore.
ERIC
Hors ligne
Hello,
Attention ca marche bien pour le moment parce que tu n'as pas trop d'enregistrements.
Je ne sais pas quelles sont perspectives pour l'avenir, mais UNION ramène vraiment BEAUCOUP d'enregistrement donc regarde bien si tu as besoin de tout ça.
Mais bon pour le moment ca marche comme tu veux c'est l'essentiel
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Pour le moment je fais une recherche sur trois tables:
Une table de 1489 poèmes (Avec un limit de 10)
une autre de 3247 poèmes (Avec un limit de 20)
et une dernière de 351 poèmes.(Avec un limit de 5)
Le tout avec un limit de 15.
ça marche parfaitement (surement parce qu'il n'y a pas beaucoup d'enregistrement effectivement), néanmoins je ne saurais pas faire autrement pour le moment puisque je vous avais demandé de l'aide à ce sujet.
Espérons que cela dure....
Hors ligne
C'est à dire que ces trois tables quasi identiques, ça sent quand même 'cor'assez le défaut de conception.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour Kris...
Il y a en effet surement des défauts de conceptions et j'essaie de les améliorer avec le temps.
Néanmoins chaque table étaient assez différentes au départ et avec le temps elles se sont uniformisées.
Mais ces trois tables me semblent réellement devoir être séparées, puisque chaque section à ces spécificités (deux à trois colonnes différentes)
Penses tu qu'elles pourraient être regroupées en laissant des colonnes inutiles pour certains types d'envois ?
Pour être plus précis:
Table thème du mois:
- Tout est commun, sauf une colonne THEME
Table poésie et peinture
- Tout est commun sauf une colonne catégorie (différentes du principe du thème)
Table poésie d'hier:
- Tout est commun sauf une colonne SOURCE (identifiant les recueils dans lesquels on trouve le poème)
Si cela est possible pourquoi pas, serait-ce une meilleur idée.
En sachant que chaque section est différente sur le site et qu'il n'y a que sur la page d'accueil que je cherche à regrouper tous les nouveaux poèmes ?
Merci d'avance pour tes conseils...
ERIC
Hors ligne
Hello,
En fait tu prends le problème à l'envers.
Actuellement ce que tu fais c'est faire la liste des colonnes de tes différentes tables déjà existantes et tu te demande si elles sont toutes utiles.
Il faut que tu identifies les différentes entités cohabitant dans ton système.
De ce que je constate tu as une entité que tu pourrais appeler "texte", une qui serait "thème" et enfin une dernière qui serait "catégorie".
Une fois que tu les as identifiées, il faut les définir.
Pour cette partie il me faudrait que tu me dises quels sont les colonnes dans chacune des tables.
Quand tu as identifié les entités et que tu les as définies, tu peux établir les différentes relations entre les entités et de cette définition de relations tu obtiens ton modèle de BDD. Ensuite une petite touche pratique pour faire en sorte que ton modèle réponde bien à tes besoins et tu obtiens finalement un modèle de BDD qui tient la route, évolutif, maintenable et qui ne te demande pas de faire des requêtes comme tu les fais actuellement
Pour information, dans ce genre d'application, la BDD est là où se trouve une très grosse partie de l'intelligence du développement. Faire un bon modèle de BDD est essentiel pour travailler dans de bonnes conditions par la suite. Donc passer un peu de temps sur sa conception n'est pas forcément une perte de temps
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne