Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  mysql päringuga abi vaja märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 29.10.2011 17:40:29 mysql päringuga abi vaja vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 29.10.2011 18:16:38 vasta tsitaadiga

sql:
  1. SELECT l.id, l.name, count(c.id)
  2. FROM list l LEFT JOIN contact c ON l.id = c.list_id
  3. GROUP BY l.id;
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 01.11.2011 14:23:35 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 01.11.2011 16:37:21 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 01.11.2011 17:32:10 vasta tsitaadiga

ma üritasins eda teha jah, aga ei õnnestu. miskipärast võtab kõik asjad 2x välja...

sql:
  1.  
  2. SELECT l.id, l.name, count(c.id)
  3. FROM list l LEFT JOIN contact c ON l.id = c.list_id
  4. LEFT OUTER JOIN customer cst ON c.id = cst.contact_id
  5. GROUP BY l.id;
  6.  
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nemu
HV vaatleja
nemu

liitunud: 22.01.2002



Autoriseeritud ID-kaardiga

sõnum 02.11.2011 11:21:23 vasta tsitaadiga

COUNT(DISTINCT c.id) kui muidu ei saa
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 02.11.2011 18:21:34 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
2korda2
HV kasutaja

liitunud: 19.07.2003




sõnum 03.11.2011 12:46:12 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 03.11.2011 13:15:10 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
fadah
HV vaatleja
fadah

liitunud: 12.11.2007




sõnum 06.11.2011 12:49:16 vasta tsitaadiga

Mina lahendaksin nii selle asja. See on ka kiirem tsutsu, kui LEFT JOINIGA tehes.

sql:
  1.  
  2.  SELECT
  3.          l.id,
  4.          l.name,
  5.          (SELECT COUNT(id) FROM contact  c WHERE c.list_id=l.id) AS contactCount
  6.          (SELECT COUNT(id) FROM tabel3 t3 WHERE t3.id=l.id) AS tabel3Count
  7.     FROM list l
  8.  
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 06.11.2011 14:42:58 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 29.01.2012 17:27:22 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 29.01.2012 17:53:21 vasta tsitaadiga

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:
  1.  
  2.  SELECT
  3.          l.id,
  4.          l.name,
  5.          (SELECT COUNT(id) FROM contact  c WHERE c.list_id=l.id) AS contactCount
  6.          (SELECT COUNT(id) FROM tabel3 t3 WHERE t3.id=l.id) AS tabel3Count
  7.     FROM list l HAVING contactCount > 2
  8.  

_________________
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
vaata kasutaja infot saada privaatsõnum
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 29.01.2012 19:26:52 vasta tsitaadiga

thumbs_up.gif having aitas
_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  mysql päringuga abi vaja
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.