Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
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 20/06/2011, 14h50   #1
Membre à l'essai
 
Homme francis la grassa
Webmaster
Inscription : avril 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme francis la grassa
Âge : 49
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 56
Points : 20
Points : 20
Par défaut assistance requête mysql

bonjour,

j'ai beaucoup de mal à appréhender les requêtes mysql. et je passe 1 temps fou là dessus sans arriver à rien ou presque.
je me posais une question :
combien couterait une assistance ponctuelle ? non pas pour me faire un cours....ça rentre plus !
mais pour me pondre la requete en fonction de mes tables et de ce j'aimerais réaliser ?

merci de votre réponse
spokito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 16h12   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
SQL est un langage. Il suffit de l'apprendre en prenant un bon bouquin ou un bon cours. C'est pas de la magie !
Je suppose que vous n'êtes pas né en sachant conduire !
Il en va de même avec n'importe quel langage informatique...

Mon site web, comme mon bouquin, peuvent vous y aider.

Sachez que je prends 1200 € la journée, et à l'heure 180 €.

mais avec un heure on peut faire au moins 30 requêtes si :
1) les tables sont bien modélisé (votre MCD respecte au moins les 3 premières formes normales)
2) vous avez un modèle de données lisible (par exemple MERISE ou UML)
3) vos questions sont bien posées avec des, données de test (jeu de données de départ et exemple de résultat en, sortie !)

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 22h22   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Bon évidemment un expert qui se déplace ça coûte cher, mais si c'est juste pour une requête, poste le descriptif des tables avec des données en exemples.
Explique ce que tu veux obtenir avec un exemple du résultat et on pourra écrire la requête.
Evidemment si c'est pour 30 requêtes ça fera beaucoup pour le forum...
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 09h32   #4
Membre à l'essai
 
Homme francis la grassa
Webmaster
Inscription : avril 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme francis la grassa
Âge : 49
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 56
Points : 20
Points : 20
Merci à tous les 2 pour votre réponse. Comme vous l'avez deviné, je ne suis pas un pro et je me suis lancé dans quelque chose qui me dépasse un peu, honnêtement.
J'ai bien essayé de m'y mettre, mais c'est vraiment abstrait pour moi.
Est-ce que mes tables sont correctement créées ? Je l'espère....
J'ai démarré ça il y a 4 ans maintenant. Je me suis fait aider régulièrement quand je bloquais, mais je dois dire que les requêtes, pour moi, c'est ce qu'il y a de "pire" à appréhender.
Il me reste 1 requête à sortir et je considèrerai le site comme "fini", même si ça ne l'est jamais vraiment.
Ce qui me bloque, c'est le code pour un moteur de recherche.
Vous pouvez voir sur cette page test http://francis.cmc26.free.fr/index.p...lignesearchdoc la page de saisie qui appelle 3 tables dans des SELECT.
table rubrique :
Code :
1
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `rubrique` (
  `numrubrique` int(11) NOT NULL AUTO_INCREMENT,
  `titre` varchar(1000) NOT NULL,
  `text` varchar(1000) NOT NULL,
  `numpays` int(11) NOT NULL,
  PRIMARY KEY  (`numrubrique`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
table paru :
Code :
1
2
3
4
5
CREATE TABLE IF NOT EXISTS `paru` (
  `numparu` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` varchar(100) NOT NULL,
  PRIMARY KEY  (`numparu`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='table parutions/revues' AUTO_INCREMENT=22 ;
table pays :
Code :
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `pays` (
  `numpays` int(11) NOT NULL,
  `libelle` varchar(30) NOT NULL DEFAULT '',
  `flag` varchar(50) NOT NULL,
  PRIMARY KEY  (`libelle`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='table des pays d''origine des avions';
Je veux afficher les résultats de la table DOC, dont voici la structure :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE `doc` (
  `numdoc` int(11) NOT NULL AUTO_INCREMENT,
  `numparu` int(11) NOT NULL,
  `contenu` varchar(2000) NOT NULL,
  `plan` varchar(1000) NOT NULL,
  `profil` varchar(1000) NOT NULL,
  `parution` varchar(1000) NOT NULL,
  `mois` varchar(200) NOT NULL,
  `annee` smallint(4) NOT NULL,
  `numero` varchar(1000) NOT NULL,
  `suiv` varchar(50) NOT NULL,
  `numavion` int(11) NOT NULL,
  `numredacteur` int(11) NOT NULL,
  PRIMARY KEY  (`numdoc`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=312 ;
D'autres tables sont intéressantes pour ressortir des données. en particulier une table "numero" qui détaille les revues par numero de parution et une table "avion" d'ou est extrait le numavion(id de la table) et la table "constructeur" qui est en relation avec la table avion et qui permet de sortir le nom du constructeur correspondant.
je peut donner le lien vers la base du site test en mp, si une âme charitable veut bien me donner un coup de main.
j'avoue que je ne m'attendais pas à de tels prix, mais ils sont sûrement mérités .

ma page avec la requete à faire en ligne 96 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
<link href="menunav.css" rel="stylesheet" type="text/css" />
<form action="index.php?page=lignesearchdoc" method="post">
<TABLE width="200" height="120" align="left"    >
<!--Première ligne vide -->
<tr>
	<td colspan="2" >&nbsp;</td>
</tr>
 
<!--Ligne 2 -->
<tr>
<!-- Colonne 1, le titre -->
    <td>Rubrique</td>
<!-- Colonne 2, le sélecteur -->
    <td >
	<SELECT name="chxrubrique" class="selecteur_center"><option></option>
 
                  <?php
			IF(isset($_POST['chxrubrique']) AND $_POST['chxrubrique']<>'')
				$chxrubrique = $_POST['chxrubrique'];
			else
				$chxrubrique = '';
						$resultat=mysql_query("SELECT numrubrique, titre FROM rubrique ORDER BY titre "); 
						while($ligne=mysql_fetch_array($resultat)){
							echo "<option value=\"".$ligne['numrubrique']."\"";
							IF($ligne["numrubrique"] == $chxrubrique) echo "selected";
							echo ">".strtoupper($ligne['titre'])."";
						}
						?>
    </select>
    </td>
</tr>
 
<!--Ligne 3 -->
<tr>
	<!-- Colonne 1, le titre -->
	<td ><div align="right">Revue</div></td>
	<!-- Colonne 2, le sélecteur -->
	<td >
		<SELECT name="chxparu" class="selecteur">
		<option></option>
		<?php
			IF(isset($_POST['chxparu']) AND $_POST['chxparu']<>'')
				$chxparu = $_POST['chxparu'];
			else
				$chxparu = '';
						$resultat=mysql_query("SELECT numparu, paru.libelle AS nomparu FROM paru WHERE 1 "); 
						while($ligne=mysql_fetch_array($resultat)){
							echo "<option value=\"".$ligne['numparu']."\"";
							IF($ligne["numparu"] == $chxparu) echo "selected";
							echo ">".$ligne['nomparu'];
			}?>
		</select>
	</td>
</tr>
 
<!--Ligne 4 -->
<tr>
	<!-- Colonne 1, le titre -->
	<td ><div align="right">Pays</div></td>
	<!-- Colonne 2, le sélecteur -->
	<td >
		<SELECT name="chxpays" class="selecteur">
		<option></option>
		<?php
			IF(isset($_POST['chxpays']) AND $_POST['chxpays']<>'')
				$chxpays = $_POST['chxpays'];
			else
				$chxpays = '';
			$resultat=mysql_query("SELECT  libelle FROM pays ORDER BY libelle");
			while($ligne=mysql_fetch_array($resultat))
			{
				echo "<option value=\"".$ligne['libelle']."\" ";
				IF ($chxpays==$ligne['libelle'])
				echo "selected";
				echo">".$ligne['libelle'];
			}?>
		</select>
	</td>
</tr>
 
<!--Ligne 5 -->
<tr>
	<!--Bouton rechercher -->
	<td colspan="2"><div align="center"><input type="submit" value="<?php echo Rechercher;?>" /></div></td>
</tr>
 
<!--Fin de la table -->
</table>
</form>
 
 
<?
 
 
	$query = "SELECT * FROM doc WHERE ??? ORDER BY numdoc";
	//echo($query);
	$resultatdocs = mysql_query($query);// OR die($query);
	IF(mysql_num_rows($resultatdocs) == 0) {
		echo 'Aucune fiche ne correspond à votre requête. Modifiez vos paramètres';
	}else{
		echo '<div class=\"titre_page\">Résultat de la recheche</div>';
		while($ligne=mysql_fetch_row($resultatdocs))
			echo "<table class=\"Back_1\" width=\"500\"><tr><td  colspan=\"2\"valign=\"middle\"align=\"center\">".$ligne[0]."</td></tr>";
		echo '</table>';
	}
 
 
?>
spokito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 17h47   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Ce n'est pas vraiment un problème purement de requête, mais fortement lié à php.
En gros l'idée c'est de générer la requête en fonction des paramêtres saisis par l'utilisateur.
Je te propose un exemple avec PARU car je ne vois pas de lien entre RUBRIQUE et DOC, à toi de décliner l'idée :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
	$query = "SELECT /*pas * mais les colonnes nécessaires*/ FROM doc d "
	IF (isset($_POST["chxparu"])){
		$query .= " JOIN paru p ON d.numparu = p.numparu ";
	}
	/*Les autres conditions IF pour les jointures (JOIN) en fonctions des champs select utilisés*/
	/*Le WHERE*/
	$query .= " WHERE 1 = 1 "
	IF (isset($_POST["chxparu"])){
		$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
	}
	/*Les autres conditions IF pour les filtres (WHERE) en fonctions des champs select utilisés*/
	$query .= " ORDER BY numdoc ";
PS : Concaténer une donnée provenant d'une IHM dans une requête comme ici :
Code :
$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
est une faille de sécurité de type Injection SQL, mais je te laisse mettre en place le code nécessaire pour l'éviter.

Personnelement je préfèrerais l'utilisation de bind variable avec PDO par exemple, mais mysql_real_escape_string sera plus simple à intégrer dans ton site.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 08h02   #6
Membre à l'essai
 
Homme francis la grassa
Webmaster
Inscription : avril 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme francis la grassa
Âge : 49
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 56
Points : 20
Points : 20
Citation:
Envoyé par skuatamad Voir le message
Ce n'est pas vraiment un problème purement de requête, mais fortement lié à php.
En gros l'idée c'est de générer la requête en fonction des paramêtres saisis par l'utilisateur.
Je te propose un exemple avec PARU car je ne vois pas de lien entre RUBRIQUE et DOC, à toi de décliner l'idée :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
	$query = "SELECT /*pas * mais les colonnes nécessaires*/ FROM doc d "
	IF (isset($_POST["chxparu"])){
		$query .= " JOIN paru p ON d.numparu = p.numparu ";
	}
	/*Les autres conditions IF pour les jointures (JOIN) en fonctions des champs select utilisés*/
	/*Le WHERE*/
	$query .= " WHERE 1 = 1 "
	IF (isset($_POST["chxparu"])){
		$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
	}
	/*Les autres conditions IF pour les filtres (WHERE) en fonctions des champs select utilisés*/
	$query .= " ORDER BY numdoc ";
PS : Concaténer une donnée provenant d'une IHM dans une requête comme ici :
Code :
$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
est une faille de sécurité de type sql injection, mais je te laisse mettre en place le code nécessaire pour l'éviter.

Personnelement je préfèrerais l'utilisation de bind variable avec PDO par exemple, mais mysql_real_escape_string sera plus simple à intégrer dans ton site.
salut skuatamad et merci pour ton geste .
je ne suis pas sur d'avoir tout saisi mais je vais essayer d'avancer avec ça comme base.
déjà, comme tu l'a remarqué, je t'ai mis une coquille la bonne table doc contient bien le numrubrique.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE IF NOT EXISTS `doc` (
  `numdoc` int(11) NOT NULL AUTO_INCREMENT,
  `numparu` int(11) NOT NULL,
  `contenu` varchar(2000) NOT NULL,
  `plan` varchar(1000) NOT NULL,
  `profil` varchar(1000) NOT NULL,
  `suiv` varchar(50) NOT NULL,
  `numavion` int(11) NOT NULL,
  `numredacteur` int(11) NOT NULL,
  `numpays` int(11) NOT NULL,
  `numrubrique` int(11) NOT NULL,
  `numnumero` int(11) NOT NULL,
  PRIMARY KEY  (`numdoc`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=303 ;
et il faut rajouter la table numero :
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `numero` (
  `numnumero` int(11) NOT NULL AUTO_INCREMENT,
  `numparu` int(11) NOT NULL,
  `numero` int(11) NOT NULL,
  `type` varchar(50) NOT NULL,
  `mois` varchar(50) NOT NULL,
  `annee` int(11) NOT NULL,
  `photo` varchar(50) NOT NULL,
  PRIMARY KEY  (`numnumero`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
pour l'instant je vais mettre de coté le probleme de sql injection pour pas tout mélanger. je vais d'abord essayer de faire marcher ma page.
je pense que je comprends la logique mise en oeuvre, je vais donc essayer de faire marcher ça. je ne manquerais pas de te faire 1 rapport
@++
spokito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h54   #7
Membre à l'essai
 
Homme francis la grassa
Webmaster
Inscription : avril 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme francis la grassa
Âge : 49
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 56
Points : 20
Points : 20
je te livre ma page complète. j'ai encore une erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/142/sdb/0/2/francis.cmc26/lignesearchdoc.php on line 145
Aucune fiche ne correspond à votre requête. Modifiez vos paramètres


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
 
<? define('SEARCH','Rechercher');
 
FUNCTION addQuery(&$queryparams, $newField){
	//echo $newfield."<br>";
	IF($queryparams == '')
		$queryparams = " where ".$newField;
	else
		$queryparams .= " and ".$newField;
} ?>
<link href="menunav.css" rel="stylesheet" type="text/css" />
<form action="index.php?page=lignesearchdoc" method="post">
<TABLE width="200" height="120" align="left"    >
<!--Première ligne vide -->
<tr>
	<td colspan="2" >&nbsp;</td>
</tr>
 
<!--Ligne 2 -->
<tr>
<!-- Colonne 1, le titre -->
    <td>Rubrique</td>
<!-- Colonne 2, le sélecteur -->
    <td >
	<SELECT name="chxrubrique" class="selecteur_center"><option></option>
 
                  <?php
			IF(isset($_POST['chxrubrique']) AND $_POST['chxrubrique']<>'')
				$chxrubrique = $_POST['chxrubrique'];
			else
				$chxrubrique = '';
						$resultat=mysql_query("SELECT numrubrique, titre FROM rubrique ORDER BY titre "); 
						while($ligne=mysql_fetch_array($resultat)){
							echo "<option value=\"".$ligne['numrubrique']."\"";
							IF($ligne["numrubrique"] == $chxrubrique) echo "selected";
							echo ">".strtoupper($ligne['titre'])."";
						}
						?>
    </select>
    </td>
</tr>
 
<!--Ligne 3 -->
<tr>
	<!-- Colonne 1, le titre -->
	<td ><div align="right">Revue</div></td>
	<!-- Colonne 2, le sélecteur -->
	<td >
		<SELECT name="chxparu" class="selecteur">
		<option></option>
		<?php
			IF(isset($_POST['chxparu']) AND $_POST['chxparu']<>'')
				$chxparu = $_POST['chxparu'];
			else
				$chxparu = '';
						$resultat=mysql_query("SELECT numparu, paru.libelle AS nomparu FROM paru WHERE 1 "); 
						while($ligne=mysql_fetch_array($resultat)){
							echo "<option value=\"".$ligne['numparu']."\"";
							IF($ligne["numparu"] == $chxparu) echo "selected";
							echo ">".$ligne['nomparu'];
			}?>
		</select>
	</td>
</tr>
 
<!--Ligne 4 -->
<tr>
	<!-- Colonne 1, le titre -->
	<td ><div align="right">Pays</div></td>
	<!-- Colonne 2, le sélecteur -->
	<td >
		<SELECT name="chxpays" class="selecteur">
		<option></option>
		<?php
			IF(isset($_POST['chxpays']) AND $_POST['chxpays']<>'')
				$chxpays = $_POST['chxpays'];
			else
				$chxpays = '';
			$resultat=mysql_query("SELECT  libelle FROM pays ORDER BY libelle");
			while($ligne=mysql_fetch_array($resultat))
			{
				echo "<option value=\"".$ligne['libelle']."\" ";
				IF ($chxpays==$ligne['libelle'])
				echo "selected";
				echo">".$ligne['libelle'];
			}?>
		</select>
	</td>
</tr>
 
<!--Ligne 5 -->
<tr>
	<!--Bouton rechercher -->
	<td colspan="2"><div align="center"><input type="submit" value="<?php echo Rechercher;?>" /></div></td>
</tr>
 
<!--Fin de la table -->
</table>
</form>
<?
//rubrique
IF(isset($_POST['chxrubrique']) AND $_POST['chxrubrique']<>'')
  addquery($criteres,"rubrique.titre = '".$_POST['chxrubrique']."'");
 
//revue
/*if(isset($_POST['chxperiode']) and $_POST['chxperiode']<>''){
	switch($_POST['chxperiode']){*/
IF(isset($_POST['chxparu']) AND $_POST['chxparu']<>'')
  addquery($criteres,"paru.libelle = '".$_POST['chxparu']."'");
 
//pays
IF(isset($_POST['chxpays']) AND $_POST['chxpays']<>'')
  addquery($criteres,"pays = '".$_POST['chxpays']."'");
 
//affichage du résultat
IF($criteres<>''){
 
	$query = "SELECT numdoc, numparu, contenu, numavion, numredacteur, numpays, numrubrique, numnumero, numero, libelle FROM doc d, numero n, paru p ";
	IF (isset($_POST["chxparu"])){
		$query .= " JOIN paru p ON d.numparu = p.numparu ";
	}
		IF (isset($_POST["chxrubrique"])){
		$query .= " JOIN rubrique r ON d.numrubrique = r.rumrubrique ";
	}
		IF (isset($_POST["chxpays"])){
		$query .= " JOIN pays y ON d.numpays = y.numpays ";
	}
	/*Les autres conditions IF pour les jointures (JOIN) en fonctions des champs select utilisés*/
	/*Le WHERE*/
	$query .= " WHERE 1 = 1 ";
	IF (isset($_POST["chxparu"])){
		$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
	}
	IF (isset($_POST["chxrubrique"])){
		$query .= " AND r.numrubrique = ".$_POST["chxrubrique"]." ";
	}
	IF (isset($_POST["chxpays"])){
		$query .= " AND y.numpays = ".$_POST["chxpays"]." ";
	}
	/*Les autres conditions IF pour les filtres (WHERE) en fonctions des champs select utilisés*/
	$query .= " ORDER BY numdoc ";
 
		$resultatdocs = mysql_query($query);// OR die($query);
	IF(mysql_num_rows($resultatdocs) == 0)
		echo 'Aucune fiche ne correspond à votre requête. Modifiez vos paramètres';
	else{
		echo '<div class=\"titre_page\">Résultat de la recheche</div>';
		while($ligne=mysql_fetch_row($resultatdocs))
			echo "<table class=\"Back_1\" width=\"500\"><tr><td  valign=\"middle\"align=\"center\">".$ligne[0]."&nbsp;".$ligne[1]."&nbsp;".$ligne[2]."&nbsp;".$ligne[3]."&nbsp;".$ligne[4]."&nbsp;".$ligne[5]."&nbsp;".$ligne[6]."&nbsp;".$ligne[7]."&nbsp;".$ligne[8]."&nbsp;".$ligne[9]."</td></tr>";
		echo '</table>';
	}
 
}else
	echo('Veuillez saisir au moins un paramètre de recherche');
 
?>
ça ressemble à une erreur dans la requète, j'ai dû faire une boulette dans l'interprétation de tes recommandations
spokito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 20h13   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Il faut aliaser les colonnes dans le SELECT.
Les jointures s'effectuent via l'opérateur JOIN, pas besoin de les lister dans la clause FROM.
J'ai supprimé les tests liés aux jointures parce que tu peux vouloir ramener des colonnes de ces table, par contre tu n'utilises aucune colonne des tables RUBRIQUE et PARU.
La fonction addquery ne sert à rien, je commence mon WHERE par 1=1 comme ça il suffit de rajouter des AND pour filter sans ce prendre la tête pour savoir si c'est le 1er rajouté ou pas.
Donc quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query  = " SELECT d.numdoc, d.numparu, d.contenu, d.numavion, d.numredacteur, d.numpays, d.numrubrique, d.numnumero, n.numero, p.libelle ";
$query .= " FROM doc d ";
$query .= " JOIN numero n ON d.numnumero = n.numnumero ";
$query .= " JOIN paru p ON d.numparu = p.numparu ";
$query .= " JOIN rubrique r ON d.numrubrique = r.rumrubrique ";
$query .= " JOIN pays y ON d.numpays = y.numpays ";
$query .= " WHERE 1 = 1 ";
IF (isset($_POST["chxparu"])){
	$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
}
IF (isset($_POST["chxrubrique"])){
	$query .= " AND r.numrubrique = ".$_POST["chxrubrique"]." ";
}
IF (isset($_POST["chxpays"])){
	$query .= " AND y.numpays = ".$_POST["chxpays"]." ";
}
$query .= " ORDER BY d.numdoc ";
Au fait tu sembles tester aussi <>'' :
Code :
IF(isset($_POST['chxpays']) AND $_POST['chxpays']<>'')
donc si c'est nécessaire, fait de même dans la construction de la requête pour chacun des tests.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 18h00   #9
Membre à l'essai
 
Homme francis la grassa
Webmaster
Inscription : avril 2007
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme francis la grassa
Âge : 49
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 56
Points : 20
Points : 20
Citation:
Envoyé par skuatamad Voir le message
Il faut aliaser les colonnes dans le SELECT.
Les jointures s'effectuent via l'opérateur JOIN, pas besoin de les lister dans la clause FROM.
J'ai supprimé les tests liés aux jointures parce que tu peux vouloir ramener des colonnes de ces table, par contre tu n'utilises aucune colonne des tables RUBRIQUE et PARU.
La fonction addquery ne sert à rien, je commence mon WHERE par 1=1 comme ça il suffit de rajouter des AND pour filter sans ce prendre la tête pour savoir si c'est le 1er rajouté ou pas.
Donc quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$query  = " SELECT d.numdoc, d.numparu, d.contenu, d.numavion, d.numredacteur, d.numpays, d.numrubrique, d.numnumero, n.numero, p.libelle ";
$query .= " FROM doc d ";
$query .= " JOIN numero n ON d.numnumero = n.numnumero ";
$query .= " JOIN paru p ON d.numparu = p.numparu ";
$query .= " JOIN rubrique r ON d.numrubrique = r.rumrubrique ";
$query .= " JOIN pays y ON d.numpays = y.numpays ";
$query .= " WHERE 1 = 1 ";
IF (isset($_POST["chxparu"])){
	$query .= " AND p.numparu = ".$_POST["chxparu"]." ";
}
IF (isset($_POST["chxrubrique"])){
	$query .= " AND r.numrubrique = ".$_POST["chxrubrique"]." ";
}
IF (isset($_POST["chxpays"])){
	$query .= " AND y.numpays = ".$_POST["chxpays"]." ";
}
$query .= " ORDER BY d.numdoc ";
Au fait tu sembles tester aussi <>'' :
Code :
IF(isset($_POST['chxpays']) AND $_POST['chxpays']<>'')
donc si c'est nécessaire, fait de même dans la construction de la requête pour chacun des tests.
merci
j'ai juste fait un essai express qui ne marche pas (normal )
pas le temps de m'y remettre vraiment avant quelques jours. je te tiens au courant probablement en début de semaine.
et je te remercie vivement de ton assistance, c'est un vrai soutien !
spokito 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 22h31.


 
 
 
 
Partenaires

Hébergement Web