Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


hjälp med sql-fråga

Postades av 2003-04-19 18:28:20 - Andreas Lindh, i forum mysq, Tråden har 5 Kommentarer och lästs av 836 personer

Jag har den här sqlfrågan som ska visa en hockeytabell.
Allt fungerar bra förutom Målskillnad, Förluster och poäng.

Tabellerna ser ut så här
s_deltagande_lag
Id
Namn
Serie_ID

s_matcher
Id
Serie_ID
Lagid_a
lagid_b
Resultat_a
resultat_b

Frågan ser ut så här
<code>
SELECT s_deltagande_lag.ID, Namn,s_deltagande_lag.serie_ID,
@games := Count(s_matcher.ID) AS games,
@win := Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) AS win,
@tie := Sum(resultat_a=resultat_b) AS tie,
@games - @win - @tie as lost ,
@win*2 + @tie AS poang,
@plus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) as plus,
@minus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as minus,
@plus - @minus as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON (s_deltagande_lag.ID=lagid_a) Or (s_deltagande_lag.ID=lagid_b)
where s_deltagande_lag.serie_ID = 2
GROUP BY ID, Namn

</code>

Problemet är att den inte räknar rätt på poang, plusminus och lost.
Sorterar jag efter tex namn och Alingsås kommer först. Då skrivs alingsås poäng, plusminus och förluster ut på alla lag.

Någon som kan se vad som är fel?


Svara

Sv: hjälp med sql-fråga

Postades av 2003-04-19 23:38:32 - Per Persson

Jag tror inte att du har gjort något fel. Det verkar vara en konstighet i variabelhanteringen i MySQL.

Det finns en sak som är gemensam för de tre fält du har problem med:
De utgörs alla av uttryck av endast användardefinierade variabler.

I MySQLs manual står något som antagligen har med detta att göra:
<quote>
Note: in a SELECT statement, each expression is evaluated only when it's sent to the client. This means that in the HAVING, GROUP BY, or ORDER BY clause, you can't refer to an expression that involves variables that are set in the SELECT part. For example, the following statement will NOT work as expected:

<code>
mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;
</code>
The reason is that @aa will not contain the value of the current row, but the value of id for the previous accepted row.

The rule is to never assign and use the same variable in the same statement.
</quote>
Jag har dock inte förstått ännu vad det är som händer.

Lösningen för dig är nog att göra beräkningarna i PHP efter att du har hämtat lämpliga fält.


Svara

Sv: hjälp med sql-fråga

Postades av 2003-04-20 11:39:40 - Andreas Lindh

Kan ge ett exempel på hur det blir.

Alingsås 1 vinst 5 oavgjorda 4 förluster 5 plusmål 67 minusmål plusminus -62 7 poäng
Då får alla lag andra lag också samma värden på förluster, plusminus och poäng
Tibro 9 vinster 1 oavgjorda 4 förluster 45 plusmål 22 minusål plusminus -62 7 poäng

Jag hade tänkt göra uträkningarna i asp.net koden men eftersom jag vill sortera posterna efter poäng, plusminus och plusmål gjorde jag så här.


Svara

Sv: hjälp med sql-fråga

Postades av 2003-04-20 13:00:07 - Per Hultqvist

Felet om jag förstår det rätt är att du inte får använda variablerna (som du tilldelar i SQL-satsen) på högersidan i uttryck eftersom dessa inte är satta korrekt vid tidpunkten för uträkningen. Om jag tolkar det rätt får du föregående rads värde i alla uträkningar.

Tre kolumner får du problem med : lost, poang och plusminus, eftersom dessa baserar sig på andra kolumners värden. Fungerar det att skriva kolumnnamnen i stället för variabelnamnen där? Dvs du kan skippa alla variabler och bara skriva :

<code>
SELECT s_deltagande_lag.ID, Namn,s_deltagande_lag.serie_ID,
Count(s_matcher.ID) AS games,
Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) AS win,
Sum(resultat_a=resultat_b) AS tie,
games - win - tie as lost ,
win*2 + tie AS poang,
Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) as plus,
Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as minus,
plus - minus as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON (s_deltagande_lag.ID=lagid_a) Or (s_deltagande_lag.ID=lagid_b)
where s_deltagande_lag.serie_ID = 2
GROUP BY ID, Namn
</code>

Om inte detta fungerar så finns det iallafall tre andra sätt att lösa det på :

1) Stored Procedure...

2) Strunta i kolumnerna lost, poang och plusminus och räkna ut detta i koden i efterhand. Sorteringen på dessa kolumner måste i såfall också göras i koden.

3) Klipp och klistra lite. Plus är ju :

<code>
Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b)
</code>

och minus är :

<code>
Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a)
</code>

så plusminus är väl då rimligen :

<code>
Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a)
</code>


Svara

Sv: hjälp med sql-fråga

Postades av 2003-04-23 19:52:41 - Andreas Lindh

Tack för hjälpen. Nu fungerar det

Fungerar stored procedures i mysql?
I så fall. Hur skapar och använder man stored procedures?


Svara

Sv: hjälp med sql-fråga

Postades av 2003-04-25 21:21:59 - Andreas Lindh

hittade det här i manualen

"Our aim is to have stored procedures implemented in MySQL Server around version 5.0."

Så det verkar inte fungera med Stored procedures i mysql än


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 155
27 952
271 704
1 414
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies