Jump to content

mysql - kā dabūt kolonas ierakstus rindā \ laukā ?


Al Capone
 Share

Recommended Posts

Labdien forumieši ..

 

ir query:

SELECT DISTINCT items, opt1, opt2 FROM table ...

kurš atlasa sekojošus rezultātus:

items   opt1   opt2

 1	 1	 0
 2	 1	 1
 2	 1	 2
 2	 1	 3
 2	 1	 4

nepieciešams katram "items" dabūt opt2 rezultātus (rindā..),

daru šādi:

SELECT DISTINCT items, opt1, GROUP_CONCAT(opt2 SEPERATOR ', ') as concat_opt2 FROM table ...

un dabūju rezultātus:

items   opt1   concat_opt2

 1	 1	 0, 1, 2, 3, 4

kas pavisam neder :\

vēlamais\nepieciešamais rezultāts:

items   opt1   concat_opt2

 1	 1	 0
 2	 1	 1, 2, 3, 4

 

kā?

Link to comment
Share on other sites

Леший

DISTINCT šajā gadījumā neder

SELECT items, opt1, GROUP_CONCAT(opt2 SEPARATOR ', ') as concat_opt2 FROM table GROUP BY items

Labots - Леший
  • Patīk 1
Link to comment
Share on other sites

Paldies!

 

follow up.. neliela aizķerīte sanāca.. :[

 

query izskatas aptuveni šādi:

SELECT
 table1.items,
 table2.opt1,
 GROUP_CONCAT(table3.opt2 SEPERATOR ', ') as concat_opt2
FROM
 table1
LEFT JOIN table2 ON table1.id = table2.table1_id
....
LEFT JOIN table3 ON table2.id = table3.table2_id

WHERE
...
HAVING
(SELECT COUNT(*) FROM table3 WHERE table2.id = table3.table2_id AND table3.opt2 = 1)) = (1)

 

respektīvi dzēšot 4.rindu - GROUP_CONCAT un 9.rindu LEFT JOIN table3 ON table2.id = table3.table2_id query strādā, bet nu jā..

tagad strīdās ar mani un saka:

Unknown column 'database.table2.id' in 'where clause'

 

wassup with that?

 

(group by vēl neesu ielicis..)

Labots - Crabby
Link to comment
Share on other sites

Леший

MySQLam var nepatikt, kad join clause aprakstā tu liec joinojamo tabulu, kā 2.

Paprovē tā:

LEFT JOIN table2 ON table2.table1_id = table1.id

Un vispār, iekš table2 ir lauks ID?

Link to comment
Share on other sites

samainīju, diemžēl nestrādā.. :[ (ir lauks - ar aizdomu pilnām acīm skatījos, bet ir :} )

 

kaut kas tajā HAVING clausē nav riktīgi.. izmainīju to HAVING clausi uz sekojošu (pievienoju table2 FROM laukā)

(SELECT COUNT(*) FROM table3, table2 WHERE table2.id = table3.table2_id AND table3.opt2 = 1)) = (1)

un query izpildas, tik šķiet rezultāti nav cerētie.. :[

 

Intresanti liekas tas, ka bez LEFTJOIN un GROUP_CONCAT viss ir tip / top ...

 

(pēc hokeja turpināšu - tad ar iepostēšu kas un kā..)

Labots - Crabby
Link to comment
Share on other sites

Леший

Tu countu vari taisīt arī bez subquery, kas ir evil.

Piemērs:

 

SELECT *, count(*) AS cnt FROM table GROUP BY lauks

Link to comment
Share on other sites

mkay,

risinājums takā atradās:

Iekš HAVING subquery iekš WHERE klauses ir table2.id pie kura tad mysqls āri bļāva - unknown column ... lai atrisinātu pievienojam (selektojam) šo table2.id iekš "galvenā" query..

 

viss tip top..

 

ziņkāre moka kāpēc query defekts parādās tikai pēc GROUP_CONCAT izmantošanas :|

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...