Portál AbcLinuxu, 10. května 2025 11:43

Dotaz: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce

15.6.2012 09:00 xter
Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Přečteno: 516×
Odpovědět | Admin
Ahoj. Mám tabulky senzor a mereni. V tabulce senzor jsou definice teplotních senzorů, v tabulce mereni jsou hodnoty jednotlivých měření. Tabulka mereni:
senzor_id | mereni_id | hodnota
-------------------------------
1           1           12
1           2           13
2           1           12
...
Potřebuji vypsat senzory (senzor_id) seřazené podle hodnoty v prvním měření, pokud mají některé senzory stejné hodnoty, tak podle pořadí v druhém měření, pak podle třetího měření ... Kdyby se to přepsalo na sloupce, tak by to bylo "order by hodnota_mereni_1, hodnota_mereni_2, ...". Jedná se o SŘBD mysql. Jak by měl takový dotaz vypadat?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.6.2012 10:50 DK
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT senzor_id FROM tabulka ORDER BY senzor_id ASC, mereni_id ASC, hodnota ASC

pokud chces vsechna data, tak takto

SELECT * FROM tabulka ORDER BY senzor_id ASC, mereni_id ASC, hodnota ASC
15.6.2012 10:51 DK
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
aha, tak az ted jsem to pochopil :) jak vypada tabulka senzoru a jak to chcete mit vypsane? (presne priklady)
15.6.2012 12:20 xter
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Stačí mi seřazené sensor_id, s tabulkou senzorů si to pak už spojit dokážu.
15.6.2012 11:43 jekub
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
jen námět pro seřazení senzorů podle celkově vyšších měření (ne prvního vyššího). Pro úplné řešení "stačí" omezit výběr z vniřního selectu na první neulovou hodnotu. A to nevím, jak se v mysql dělá.
select senzor_id from senzor s
order by(
 select count(*) from(
  select
  m1.senzor_id,
  case
    when m1.hodnota > m2.hodnota or m2.hodnota is null then 1
    when m1.hodnota < m2.hodnota then -1
    else 0
  end m1_m2
  from mereni m1
  left join mereni m2 on m1.senzor_id <> m2.senzor_id and m1.mereni_id=m2.mereni_id
 ) where m1.senzor_id=s.senzor_id and m1_m2>0
)

wamba avatar 15.6.2012 13:08 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
nešlo by něco jako:
select sum(hodnota*100^(4-mereni_id)) as a, senzor_id from mereni   group by senzor_id order by a
This would have been so hard to fix when you don't know that there is in fact an easy fix.
16.6.2012 13:50 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
To je dobrý řešení, pokud jsou hodnoty s malym rozsahem a je jich málo... aby se to dalo naladit tak, by nepřetekly. Float má jen 15 platnejch číslic.
Josef Kufner avatar 18.6.2012 09:59 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Podobný způsob spočívá v použití group_concat. Jen je třeba zachovat nevýznamné nuly. Zrovna zde to asi nebude lepší, ale v jiných podobných situacích by se to mohlo hodit.
Hello world ! Segmentation fault (core dumped)
15.6.2012 21:03 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vykonove nic moc, ale podle pozadavku by to radit mohlo. Predpokladam, ze tabulka ma svoje id hodnota_id. Pokud nema, bud pridat nebo joinovat podle senzor_id and mereni_id:
select m.senzor_id, m.mereni_id, m.hodnota
from mereni m
   inner join mereni m1 on m1.hodnota_id = m.hodnota_id and m.mereni_id = 1
   inner join mereni m2 on m2.hodnota_id = m.hodnota_id and m.mereni_id = 2
   inner join mereni m3 on m3.hodnota_id = m.hodnota_id and m.mereni_id = 3
   inner join mereni m4 on m4.hodnota_id = m.hodnota_id and m.mereni_id = 4
order by m1.hodnota, m2.hodnota, m3.hodnota, m4.hodnota
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
Josef Kufner avatar 18.6.2012 09:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak několikrát seřadit jednu tabulku podle specifických podmínek 1 sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud vícekrát měříš jedny data, tak bych spíš očekával, že budeš chtít počítat nějakou střední hodnotu a rozptyl naměřených hodnot. V takovém případě bych si vytvořil pomocnou tabulku a v ní vypočtená data uchovával (senzor_id, čas, hodnota, rozptyl), aby se nemusela počítat pořád dokola, což by při kreslení grafů mohlo být náročné. Pokud by se více zapisovalo než počítalo, použil bych místo pomocné tabulky view (neboť MySQL neumí materializované view).
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.