2010-01-16 7 views
18

Je reçois l'erreur suivante listée ci-dessous et je me demandais comment résoudre ce problème.MySQL et PHP - Table non unique/alias

Not unique table/alias: 'grades' 

Voici le code qui me semble indiquer le problème.

function getRating(){ 
$dbc = mysqli_connect ("localhost", "root", "", "sitename"); 

$page = '3'; 

$sql1 = "SELECT COUNT(*) 
     FROM articles_grades 
     WHERE users_articles_id = '$page'"; 

$result = mysqli_query($dbc,$sql1); 

if (!mysqli_query($dbc, $sql1)) { 
     print mysqli_error($dbc); 
     return; 
} 

$total_ratings = mysqli_fetch_array($result); 

$sql2 = "SELECT COUNT(*) 
     FROM grades 
     JOIN grades ON grades.id = articles_grades.grade_id 
     WHERE articles_grades.users_articles_id = '$page'"; 

$result = mysqli_query($dbc,$sql2); 

if (!mysqli_query($dbc, $sql2)) { 
     print mysqli_error($dbc); 
     return; 
} 

$total_rating_points = mysqli_fetch_array($result); 
if(!empty($total_rating_points) && !empty($total_ratings)){ 
// set the width of star for the star rating 
$rating = (round($total_rating_points/$total_ratings,1)) * 10; 
echo $rating; 
} else { 
    $rating = 100; 
    echo $rating; 
} 
} 

Répondre

29

Le problème semble être ici:

SELECT COUNT(*) 
FROM grades 
JOIN grades ON grades.id = articles_grades.grade_id 
WHERE articles_grades.users_articles_id = '$page'" 

Vous essayez de joindre les grades de la table elle-même. Vous avez probablement voulu vous joindre à articles_grades.

+1

La condition ON suggérerait qu'il s'agit d'une faute de frappe – VolkerK

+0

Il semble être une vieille réponse, mais je suis resté coincé sur la requête Je pense que 'JOIN grades 'devrait être' JOIN articles_grades' –

0

Je finis que dans la requête $ sql2 la deuxième table n'est pas des grades mais des articles_grades. il sera donc:

"SELECT COUNT(*) 
     FROM grades 
     JOIN articles_grades ON grades.id = articles_grades.grade_id 
     WHERE articles_grades.users_articles_id = '$page'" 
2

il est dit que parce que vous avez les grades de nom de table dans la requête deux fois

5

Vous devez utiliser un alias si vous utilisez le même nom deux fois:

SELECT FROM grades g1 ... 
JOIN grades g2 ON g1.id = g2.grade_id ... 

Assurez-vous que avait l'intention d'utiliser deux fois le même nom et de ne pas avoir saisi deux fois le même nom par erreur.

+0

Ceci m'a aidé avec un problème sans rapport. Merci! – jordanm