pb de DISTINCT sur 2 tables

VaN
Mammouth du PHP | 1107 Messages

28 juil. 2005, 16:30

<?
$sql = "SELECT DISTINCT date FROM articles, media_articles";
?>
sql n'a pas l'air d'aimer le fait de faire un DISTINCT sur 2 tables différentes car il me renvoie :

#1052 - Champ: 'date' dans field list est ambigu

pourtant j'aimerais généré mon <select> à partir des dates contenus dans ces deux tables, mais avec 1 seule occurence de chaque date. comment dois-je m'y prendre ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 16:39

Si tu regarde le message d'erreur, il te dit que le champs date existe dans les 2 tables et qu'il ne sait pas sur lequel trier.

Donc il faut que tu fasse

Code : Tout sélectionner

SELECT DISTINCT nom_table.date FROM ...
Ensuite, si tu voulait que les 2 tables soient retournées en fonction d'un champ commum, c'est pas la bonne syntaxe
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juil. 2005, 16:40

Préfixe le nom de tes champs par le nom de la table.

VaN
Mammouth du PHP | 1107 Messages

28 juil. 2005, 16:47

oui en fait j'avais comprit que le probleme venait de la, mais prefixer mes champs par le nom des tables va me poser un autre probleme pour la suite :
<?php
$sql_sort = "SELECT DISTINCT date FROM articles, media_articles";
		$query_sort = mysql_query($sql_sort) OR die ("Error : ".mysql_error());
		while ($result_sort = mysql_fetch_array($query_sort)) {
		$date_exp = explode("-",$result_sort['date']);
		$mois_exp = $date_exp[1];
		$annee_exp = $date_exp[0];
?>
si je prefixe, je ne saurais plus sur quel champ effectuer mon explode(). Il faudrait que "je fusionne" les deux champs date pour en créer un seul, c'est possible ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 16:52

Mieux, tu donnes un alias à ton nom de colonne

Code : Tout sélectionner

SELECT DISTINCT nom_table.date AS date FROM ...
Et ensuite, tu peut travailler sur le champ "date" comme tu le faisait avant

Mais je me permet de te reposer la question, ets-ce que tu as exécuter la requete depuis PHPMyAdmin pour voir le résultat ? parce que je ne suis pas sûr que tu demande un produit cartésien (pour chaque enregistrement de la 1ere table, tu affiche tout les enregistrements de la seconde table, soit nb_enre_table1 * nb_enre_table2 enregistrements).
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

VaN
Mammouth du PHP | 1107 Messages

28 juil. 2005, 17:27

après plusieurs essais, je n'arrive toujours pas a trouver la solution :
<?php
$sql_sort = "SELECT DISTINCT articles.date AS date, DISTINCT media_articles.date AS date FROM articles, media_articles";
?>
<?php
$sql_sort = "SELECT DISTINCT articles.date, DISTINCT media_articles.date AS date FROM articles, media_articles";
?>
<?php
$sql_sort = "SELECT (DISTINCT articles.date, DISTINCT media_articles.date) AS date FROM articles, media_articles";
?>
Mieux, tu donnes un alias à ton nom de colonne

Code : Tout sélectionner

SELECT DISTINCT nom_table.date AS date FROM ...
Et ensuite, tu peut travailler sur le champ "date" comme tu le faisait avant
le pb est que j'ai deux table, donc je vais avoir deux AS date, donc le pb revient au meme : /

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juil. 2005, 17:30

SELECT DISTINCT (a.date,  m.date) FROM articles AS a, media_articles AS m 
Modifié en dernier par mere-teresa le 28 juil. 2005, 17:30, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 17:30

Mais réflechi un peu, si les noms se chevauchent, tu mets 2 nom différents ... :shock:
date_table1 et date_table2 par exemple ... :roll:

Sinon, je ne suis pas sûr que tu puisse utiliser plusieurs DISTINCT dans une même requete ...

Tu fait un
or die(mysql_error())
quand tu exécute tes requetes ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juil. 2005, 17:31

peux tu tester dans Eskuel ou PHPMyAdmin ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

VaN
Mammouth du PHP | 1107 Messages

28 juil. 2005, 17:46

SELECT DISTINCT (a.date,  m.date) FROM articles AS a, media_articles AS m 
testé dans phpmyadmin, qui me renvoie ça :

#1064 - Erreur de syntaxe près de ' m.date )
FROM articles AS a, media_articles AS m LIMIT 0, 30' à la ligne 1

VaN
Mammouth du PHP | 1107 Messages

28 juil. 2005, 17:48

Tu fait un
or die(mysql_error())
quand tu exécute tes requetes ?
oui, mais il stop le script juste, et ne m'affiche pas l'erreur, probleme d'affichage dû a je ne sais quoi(il faudrait que je crée un div special pour afficher l'erreur sur la page). donc je passe par phpmyadmin pour voir l'erreur depuis la bdd.