webForumDet fria alternativet

Sortera på värde från annan tabell

Databaser & SQL

3 svar · 341 visningar · startad av Kriko

Medlem sedan dec. 2006382 inlägg
Frågan#1

Då var det dags för lite magiska problem då... :P
Hämtar ut data för att visa rapporter för en stuteriverksamhet jag gör hemsida åt. Nu behöver jag sortera alltihopa på ett fält från en annan tabell som inte alls används i koden för tillfället.

Såhär ser min kod ut just nu:

$s = (@$_GET['s'] != "") ? $_GET['s'] : $_SESSION['sta'];
$sta = ($s != "all") ? " AND intStation = ".$s : "";

$y = (@$_GET['y'] != "") ? $_GET['y'] : date("Y");

...

$sql = "SELECT	id, ";
$sql.= "		intHingst, ";
$sql.= "		strTeknik, ";
$sql.= "		SUM(intAntalSton) AS intAntalSton2, ";
$sql.= "		SUM(intAntalBrunster) AS intAntalBrunster2, ";
$sql.= "		SUM(intAntalDrakt) AS intAntalDrakt2, ";
$sql.= "		SUM(intAntalOkanda) AS intAntalOkanda2, ";
$sql.= "		strNotering ";
$sql.= "FROM rapporter ";
$sql.= "WHERE strAr LIKE '$y'". $sta . " ";
$sql.= "GROUP BY intHingst ";
$sql.= "ORDER BY strTeknik ASC";

Nu ska allt ordnas efter hingst.strNamn där hingst.id = rapporter.intHingst.
Jag vet inte riktigt hur jag ska kunna klämma in det...
Någon som har något förslag?

Tacksam för all hjälp man kan få!

Medlem sedan dec. 200012 464 inlägg
#2

Varför är inte alla icke aggregerade kolumner i select-listan med i group by?
Vad är det som är unikt i tabellen rapporter?
behöver du verkligen like på år och varför lagras det som en sträng?

SELECT    hingst.namn,
          strTeknik,
          SUM(intAntalSton) AS intAntalSton2,
          SUM(intAntalBrunster) AS intAntalBrunster2, 
          SUM(intAntalDrakt) AS intAntalDrakt2, 
          SUM(intAntalOkanda) AS intAntalOkanda2
     FROM rapporter join hingst on hingst.id = rapporter.intHingst
    WHERE strAr like '$y' . $sta 
    GROUP BY hingst.namn,strTeknik
  ORDER BY hingst.namn ASC
Medlem sedan dec. 2006382 inlägg
#3

"id" är unikt i tabellen rapporter. Ja, man ska kunna filtrera ut rapporter från ett visst år och de sparas som text eftersom man även ska kunna använda jokertecken.

Ska testa din kod nu. Det ser lovande ut. Återkommer med resultat.

Medlem sedan dec. 2006382 inlägg
#4

Lösningen var inte riktigt vad jag letade efter, men det ledde mig in på rätt spår. Min lösning som fungerar som jag tänkt mig ser ut såhär:

$sql = "SELECT	hingst.strNamn, ";
$sql.= "		hingst.id AS hingstID, ";
$sql.= "		strTeknik, ";
$sql.= "		intRas, ";
$sql.= "		SUM(intAntalSton) AS intAntalSton2, ";
$sql.= "		SUM(intAntalBrunster) AS intAntalBrunster2, ";
$sql.= "		SUM(intAntalDrakt) AS intAntalDrakt2, ";
$sql.= "		SUM(intAntalOkanda) AS intAntalOkanda2, ";
$sql.= "		strNotering ";
$sql.= "FROM rapporter ";
$sql.= "JOIN hingst ON hingst.id = rapporter.intHingst ";
$sql.= "WHERE strAr LIKE '$y'". $sta . " ";
$sql.= "GROUP BY hingstID ";
$sql.= "ORDER BY hingst.strNamn ASC";

Jag kanske förklarade lite luddigt, men stort tack för hjälpen!

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)