SoulGodMedlem sedan aug. 20051 395 inlägg
Jag har en databas som ser ut såhär:
id - namn - link - sex - lag - bp - ml
bp & ml innehåller siffror som jag vill använda i en beräkning.
Dock blir mina uträkningar i PHP ganska avancerade, och jag undrar därför:
Finns det stöd i MySQL i att den kan beräkna saker direkt i systemet? (utan extern koppling).
Det jag "hoppas" på är att kunna göra en till kolumn som heter "total" och "snitt"... Och att total automatiskt lägger ihop bp + ml ..
Och att snitt då tar total / 2 ..
Går det?
@ndersMedlem sedan juni 200026 914 inlägg
select id, namn, link, sex, lag, bp, ml, bp+ml as total, (bp+ml)/2 as snitt
from tabell
group by id, namn, link, sex, lag, bp, ml
Edit: för inte menar du att du vill lagra de uträknade värdena direkt i tabellen? I så fall borde du använda triggers för update och insert.
SoulGodMedlem sedan aug. 20051 395 inlägg
Jag vet inte vad som blir bäst ...
Mitt problem är att jag kommer behöva göra en himla massa uträkningar..
SELECT bp FROM `wp_rvb` WHERE `sex` = "K"
Addera ihop alla dessa världen och sedan dela med numsql_rows för ovan SELECT-sats..
Och det blir totalt 4 varianter av just denna SELECT-sats..
Aldrig använt triggers / update / insert .. så det känns svårt :P
@ndersMedlem sedan juni 200026 914 inlägg
Du förklarar lite dåligt, tror jag. :)
Det är klart att du kan göra allt i SQL - men risken är att det blir onödigt svårt och oöverblickbart. Är det det här du ska göra, som du beskriver i ditt senaste inlägg, så ska du inte fundera på triggers.
Du kan göra det med subqueries, men det är inte så übersexigt.
SELECT bp,
(SELECT sum(bp) FROM wp_rvb WHERE sex = 'K') as totalt,
(SELECT avg(bp) FROM wp_rvb WHERE sex = 'K') as snitt
FROM wp_rvb WHERE sex = 'K'
SoulGodMedlem sedan aug. 20051 395 inlägg
Ja - det är jag nog ..
Det jag är ute efter är att få ut 4 stycken olika uträkningar.
Uträkning 1:
SELECT bp FROM wp_rvb WHERE sex = 'K' ..
Addera ihop alla summor från bp, dela med antalet rader och sedan visa upp det..
Uträkning 2:
SELECT ml FROM wp_rvb WHERE sex = 'K' ..
Addera ihop alla summor från ml, dela med antalet rader och sedan visa upp det..
Uträkning 3:
SELECT bp FROM wp_rvb WHERE sex = 'T' ..
Addera ihop alla summor från bp, dela med antalet rader och sedan visa upp det..
Uträkning 4:
SELECT ml FROM wp_rvb WHERE sex = 'T' ..
Addera ihop alla summor från ml, dela med antalet rader och sedan visa upp det..
Den koden jag kör just nu (för att uthämta grunden är)
<?PHP
global $wpdb;
$sql_bp_k = "SELECT bp FROM `wp_rvb` WHERE `sex` = 'K'";
$comments = $wpdb->get_results($sql_bp_k);
echo $wpdb->num_rows . 'Rows Found';
foreach ($comments as $comment) {
echo $comment->bp;
echo " / ";
}
?>
Jag har nu gjort separata länkar till allting, så det är "fult" löst ..
Dock... hur frågar jag ut servern efter snittvärdet?
Säg som sagt att jag har kolumnerna id - namn - link - sex - lag - bp - ml
...
jag vill hämta ut de 10 bästa (med högst snittvärde på bp & ml).
Så..
SELECT * FROM wp_rvb ORDER BY (snittvärdet av bp&ml ihop) LIMIT 10
....
aasahMedlem sedan mars 20033 451 inlägg
SELECT
sex,
Avg(bp) [BpMedel],
Avg(ml) [MlMedel]
FROM
wp_rvb
GROUP BY
sex
Ger en rad per sex med medelvärdena för bp och ml. Borde fixa problem 1-4.
SoulGod skrev:
jag vill hämta ut de 10 bästa (med högst snittvärde på bp & ml).
Så..
SELECT * FROM wp_rvb ORDER BY (snittvärdet av bp&ml ihop) LIMIT 10
....
Om du kan tänka dig att få ut en extra kolumn i resultatet med sorteringsvärdet så borde du kunna fixa detta i en enda fråga. Annars måste du eventuellt mellanlagra ovanstående i en temp-tabell först innan du ordnar om resultatet, men i princip:
SELECT
sex,
Avg(bp) [BpMedel],
Avg(ml) [MlMedel],
Avg(bp) + Avg(ml) [SortKol]
FROM
wp_rvb
GROUP BY
sex
ORDER BY
Avg(bp) + Avg(ml) DESC
LIMIT 10
Det är också möjligt att du kan ordna raderna efter denna summa utan att plocka ut den under SELECT.