Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
29.10.2011 17:40:29
mysql päringuga abi vaja |
|
|
on 2 tabelit:
lists:
id
name
contact:
id
list_id
nüüd tahaks välja võtta kõik listid ja lisada neil juurde count(contact.id) kus contact.list_id = lists.id, ehk siis rea output oleks selline:
list.id list.name count(contact.id)
iga listis oleva rea kohta võetakse välja üks rida.
|
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
Timukas0
HV kasutaja
liitunud: 20.03.2007
|
29.10.2011 18:16:38
|
|
|
sql:
|
SELECT l.id, l.name, count(c.id) FROM list l LEFT JOIN contact c ON l.id = c.list_id GROUP BY l.id;
|
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
01.11.2011 14:23:35
|
|
|
oleks vaja veel haarata sinna päringusse veel üks count kolmandast tabelist
customer:
id
contact_id
tahaks veel lisaks kokku lugeda, et palju ühes listis customere on. customerid on listiga seotud läbi contacti
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
2korda2
HV kasutaja
liitunud: 19.07.2003
|
01.11.2011 16:37:21
|
|
|
Timukas0 toodud näite järgi saad ise jätkata (seos läbi outer join).
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
01.11.2011 17:32:10
|
|
|
ma üritasins eda teha jah, aga ei õnnestu. miskipärast võtab kõik asjad 2x välja...
sql:
|
SELECT l.id, l.name, count(c.id) FROM list l LEFT JOIN contact c ON l.id = c.list_id LEFT OUTER JOIN customer cst ON c.id = cst.contact_id GROUP BY l.id;
|
|
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
nemu
HV vaatleja
liitunud: 22.01.2002
|
02.11.2011 11:21:23
|
|
|
COUNT(DISTINCT c.id) kui muidu ei saa
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
02.11.2011 18:21:34
|
|
|
ei aita see... ikka tuleb contact count topelt...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
2korda2
HV kasutaja
liitunud: 19.07.2003
|
03.11.2011 12:46:12
|
|
|
uuh...
Põhimõtted.
"Select" järel tuleb üles lugeda andmed, mida näha soovitakse.
"Group by" järel tuleb üles lugeda veerud, mille järgi andmeid grupeeritakse.
Soovitan lugeda mõnd raamatut. Sisuliselt peab ikka aru saama, mida miski lause teeb.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
Fukiku
Kreisi kasutaja
liitunud: 06.11.2003
|
03.11.2011 13:15:10
|
|
|
Ja kui alguses count mingeid imelikke asju teeb, siis võta countid ära ja lase kõik andmed välja - vaata, mis read päringu tulemuses on enne grupeerimist ning count jne funktsioonide rakendamist. Siis saad ka aru, miks pärast count/group by lisamist asjast ühte vai teistmoodi kokku võetakse.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
|
fadah
HV vaatleja
liitunud: 12.11.2007
|
06.11.2011 12:49:16
|
|
|
Mina lahendaksin nii selle asja. See on ka kiirem tsutsu, kui LEFT JOINIGA tehes.
sql:
|
SELECT l.id, l.name, (SELECT COUNT(id) FROM contact c WHERE c.list_id=l.id) AS contactCount (SELECT COUNT(id) FROM tabel3 t3 WHERE t3.id=l.id) AS tabel3Count FROM list l
|
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
06.11.2011 14:42:58
|
|
|
fadah, tänud. ma jõudsin ise kah sarnasele lahendusele juba.
aga hea kui keegi kaasa mõtleb ja aitab, mitte ei targuta ja ei räägi põhimõtetest ilma asjasse süvenemata!
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
29.01.2012 17:27:22
|
|
|
sarnane probleem mul jälle. tahaks välja võtta ainult need read, kus contactCount on suurem kui 2 näiteks. annab parse errorit, kui proovin teha contactCount>2
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
Fukiku
Kreisi kasutaja
liitunud: 06.11.2003
|
29.01.2012 17:53:21
|
|
|
keevitaja kirjutas: |
sarnane probleem mul jälle. tahaks välja võtta ainult need read, kus contactCount on suurem kui 2 näiteks. annab parse errorit, kui proovin teha contactCount>2 |
Näita päringut.
Tegelikult .. fadah päringut aluseks võttes, äkki piisab HAVING võtmesõna lisamisest?
sql:
|
SELECT l.id, l.name, (SELECT COUNT(id) FROM contact c WHERE c.list_id=l.id) AS contactCount (SELECT COUNT(id) FROM tabel3 t3 WHERE t3.id=l.id) AS tabel3Count FROM list l HAVING contactCount > 2
|
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
|
keevitaja
AM 10 aastat
liitunud: 05.11.2001
|
29.01.2012 19:26:52
|
|
|
having aitas
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
|
|