Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2007, 19h39   #1
Invité de passage
 
Inscription : avril 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 8
Points : 4
Points : 4
Par défaut [SQL] Relations complexes entre deux tables

Bonjour,

J'ai un petit souci que je n'arrive pas à résoudre. Sur mon site, j'ai créé un système de parution qui permet d'ajouter plusieurs "régles" de parutions.

Par exemple, je peux dire au programme que mon article n°500 sera à la une du 15 au 17 juin, puis ira en rubrique du 17 au 30 juin.

Il y a donc deux tables en jeu: la table des régles de parutions (table1), et la table des articles (table2). Jusque là tout va bien.

Lorsque je veux récupérer le liste des articles, je procède ainsi:
  • REQUETE1 - D'abord une requête dans la table1 pour chercher tous les articles qui sont censés être affichés dans la page. (Par exemple on est le 18 juin, donc mon article n°500 va sortir). Je fais donc une requête en boucle qui me sort tous les ID des articles concernés.
  • REQUETE2 (Dans la 'boucle' de REQUETE1) Pour récupérer tout le contenu des articles (table2 selon ce que m'a sorti REQUETE1)

Dans ma table2 (article), il y'a un champ 'note', c'est la note que le rédacteur donne à l'événement.

Je voudrais pouvoir sortir la liste des articles triés selon la note. Mais celà est compliqué puisque je passe d'abord par la table1 (régles de parutions)...

Si vous avez compris quelque chose... et si vous avez une solution... je suis preneur.
simonoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 21h37   #2
Membre régulier
 
Inscription : mai 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 116
Points : 96
Points : 96
Bonjour,
Ok je pense avoir compris.
Mais sans le shema des tables exactes je ne peux pas pondre cette requete SQl comme ca.
Mais il devrait y avoir un IN quelauepart qui pointerait sur un SELECT de table2.
Envoyer vos table (et peut etre une explication plus detaille) je vous donnerais la requete.
openWorld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 23h25   #3
Invité de passage
 
Inscription : avril 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 8
Points : 4
Points : 4
Table 1: (tables de parution)
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `abouclages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_object` int(11) NOT NULL DEFAULT '0',
  `debut` varchar(255) NOT NULL DEFAULT '',
  `fin` varchar(255) NOT NULL DEFAULT '',
  `type` varchar(255) NOT NULL DEFAULT '',
  `place` int(11) NOT NULL DEFAULT '0',
  `rubrique` int(11) NOT NULL DEFAULT '0',
  `align` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`),
  KEY `id_object` (`id_object`)
) ENGINE=MyISAM AUTO_INCREMENT=240 DEFAULT CHARSET=latin1 AUTO_INCREMENT=240 ;

Table 2: (articles)
Code SQL :
1
2
3
4
5
6
7
8
CREATE TABLE `cd` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titre` varchar(255) NOT NULL DEFAULT '',
  (.... etc ....)
  `avis` varchar(5) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1263 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1263 ;


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

Le champ concerné est donc `AVIS` (table cd), c'est là qu'il y a la note.

Voici le code en gros, j'ai élagé :

Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$request = "SELECT * FROM abouclages WHERE type='cd' AND rubrique='1' AND debut<='1181337616' AND fin>='1181337616' ORDER BY id DESC";
$exec = @mysql_query ($request, $connect) ;
 
	if ($myrow = mysql_fetch_array($exec)){
		do{
 
			$request_cd = "SELECT * FROM cd WHERE id=\"".$myrow['id_object']".\" ";
			$exec_cd 	 = @mysql_query ($request_cd,$connect) ;
			$cd   = @mysql_fetch_object ($exec_cd);
 
			echo $cd->titre;
			/* (etc...) */
 
		}while($myrow = mysql_fetch_array($exec));
	}
	?>

Donc moi, je voudrais pouvoir trier les résultats selon la note. Mais comme je passe d'abord par la table abouclages, je vois pas trop....

D'avance, mille mercis
simonoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 00h23   #4
Invité de passage
 
Inscription : avril 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 8
Points : 4
Points : 4
J'ai trouvé: cette requête permet d'y arriver:

Merci quand même!!!

Code SQL :
1
2
3
4
5
6
7
8
SELECT * 
FROM abouclages a
INNER JOIN cd ON cd.id = a.id_object
WHERE TYPE = 'cd'
AND a.rubrique = '1'
AND a.debut <= '1181339982'
AND a.fin >= '1181339982'
ORDER BY avis
simonoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h38.


 
 
 
 
Partenaires

Hébergement Web