Sen har jag en sida där jag t ex visar all information om produkten id=2 från Tabell1 (med pid=2 i Tabell 2 alltså), då skulle jag vilja skriva ut på vilken position den produkten ligger om man jämför produkterna omdömen emellan. Alltså snittet för pid=2 är nu 9+3/2=6 som ni ser nu, det betyder att den ligger på position 2, näst bäst alltså, före pid=1, men efter pid=3.
select t1.namn,
(select count(*) + 1 from table2
group by pid
having avg(omdome)
> (select avg(omdome)
from table2
where pid = t1.id)) as pos
from table1 as t1
where id = <aktuellt id>
Hursomhelst fick jag det inte att fungera, så här ser det ut när jag bakat in koden lite:
$sql_placering = "select t1.namn, (select count(*) + 1 from table2 group by pid having avg(omdome) > (select avg(omdome) from table2 where pid = t1.id)) as pos from table1 as t1 where id = $id";
$sql_result_placering = mysql_query($sql_placering,$connection)
or die("Fel!");
$row_placering = mysql_fetch_array($sql_result_placering);
Ordet "Fel!" ploppar upp
Jag förstod inte så mkt av SQL-koden så jag kunde inte peka ut några fel. Vad kan ha gått snett?
Problemet är att Mysql inte har stöd för denna typ av frågor, dvs där man har en select som en sub-fråga.
Du får dela upp det i flera steg
$sql_placering = "select t1.namn, avg(omdome) as betyg " .
" from table1 as t1 inner join table2 as t2 " .
" on t1.id = t2.pid where t1.id = $id group by t1.namn";
När du har fått fram värdet för betyg så kan du använda det i en ny fråga
$sql_pos = "select count(*) + 1 from table2 " .
" group by pid having avg(omdome) > $betyg";
Om jag lägger ett värde mindre eller likamed 6 visas det position: 164, men det gäller på alla produkter. Lustigt nog finns det för tillfället 163 värden i Tabell 2 (Runt 130 produkter i tabell 1).
$sql_pos = "SELECT COUNT(*) + 1 AS placering FROM table2 HAVING AVG(omdome) > 6";