Edzins Posted August 12, 2010 Report Share Posted August 12, 2010 Labdien! Ir situācija, kad ir nepieciešams administrēt "tabulas" kolonnas, proti, ir divas standarta tabulas: ID | name | animal_ID | 1 | bobis | 1 | ------------------------{pet.tabula} ID | animal | 1 | sunis | 2 | snake | ------------{animal.tabula} un viena, kuras rindās tiek definēti(administrēti) attiecīgā dzīvnieka kritēriji: ID | criteria | animal_ID | 1 | spalvas_tips | 1 | 2 | izcelsme | 1 | 3 | indiga | 2 | ------------------------------{criteria.tabula} Kāds varētu būt tas labākais un efektīvākais risinājums, lai panāktu sekojošu rezultātu: ID | name | animal_ID | spalvas_tips | izcelmse | 1 | bobis | 1 | īsspalvains | nav | --------------------------------------------------{vaicājumas pēc animal_ID = 1} Paldies jau iepriekš! E. Quote Link to comment Share on other sites More sharing options...
Леший Posted August 12, 2010 Report Share Posted August 12, 2010 JOIN Quote Link to comment Share on other sites More sharing options...
Edzins Posted August 12, 2010 Author Report Share Posted August 12, 2010 JOIN ok, bet kur un kā labāk tad saglabāt datus ("īsspalvains | nav" - iekš piemēra), kuri tiek padoti kolonnām kuras ir definētas iekš {criteria.tabula} ? Quote Link to comment Share on other sites More sharing options...
101111 Posted August 12, 2010 Report Share Posted August 12, 2010 (edited) Tev vajag vēl vienu tabulu, kur glabāt vērtības dzīvnieku parametriem. criteria_id | pet_id | value Edited August 12, 2010 by 101111 Quote Link to comment Share on other sites More sharing options...
codez Posted August 12, 2010 Report Share Posted August 12, 2010 Man šķiet, ka ar vienu SQL teikumu to nevar panākt tā, lai tas būtu universāli - respektīvi neparedzot iepriekš kolonnu skaitu. Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted August 12, 2010 Report Share Posted August 12, 2010 Datus dabūt kolonas nosaukumā cik man zināms nesanāks. Bet, gan jau ka tas patiesībā iet caur kaut kādu aplikāciju un, lai tai ērtāk apstrādāt, var izmantot f-ju group_concat skat pilnu sintaksi šeit http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat un tad vienā kolonā iegāzt visus pazīmju nosaukumus un otrā visas atbilstošās vērtības atdalītas ar kaut ko. Tad tādu viegli var tālāk apstrādāt. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
codez Posted August 12, 2010 Report Share Posted August 12, 2010 (edited) Ja izveido tabulu petcriteria pid | cid | val 1 | 1 | isspalvains 1 | 2 | nav tad šāds atgriež: SELECT p.id,p.name,GROUP_CONCAT(c.name),GROUP_CONCAT(pc.val) FROM pet p LEFT JOIN criteria c ON p.aid=c.aid LEFT JOIN petcriteria as pc ON pc.pid=p.id and pc.cid=c.id GROUP BY p.id 1, 'bobis', 'izcelsme,spalvas tips', 'nav,Isspalvains' P.S. eh, Gints par 2. minūtēm atrāk. Edited August 12, 2010 by codez Quote Link to comment Share on other sites More sharing options...
Edzins Posted August 14, 2010 Author Report Share Posted August 14, 2010 Paldies! Ar šo izskatas labi :) Vienīgi rodas problēma atlasot rezultātus no petcriteria ar WHERE paldīdzību, proti, neko neatlasa, ja prasa atlasīt pēc diviem (vai vairākiem) mainīgajiem pc.cid='1' AND pc.cid='2' viss ok ir tad kad tiek prasīts tikai viens Pilns piemērs: SELECT p.id,p.name,GROUP_CONCAT(c.name),GROUP_CONCAT(pc.val) FROM pet as p LEFT JOIN criteria as c ON p.aid=c.aid LEFT JOIN petcriteria as pc ON pc.pid=p.id and pc.cid=c.id WHERE pc.cid='1' AND pc.cid='2' GROUP BY p.id Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted August 14, 2010 Report Share Posted August 14, 2010 WHERE pc.cid IN (1, 2) Quote Link to comment Share on other sites More sharing options...
Edzins Posted August 14, 2010 Author Report Share Posted August 14, 2010 WHERE pc.cid IN (1, 2) šādi viss ok, vienīgi rodas cita proba, tiek atlasīti arī tādi p.id, kuri satur tikai vienu pc.cid='1' vai arī pc.cid='2', vai arī abus pc.cid='1' UN pc.cid='2', proti,ir nepieciešams panākt rezultātu ka atlasa tikai tos p.id, kuri satur abus šos kritērijus (pc.cid='1' AND arī pc.cid='2') pēc iepriekšminētā piemēra (sry, iespējams iepriekš neskaidri izteicos, ko vēlo panākt :) ) Quote Link to comment Share on other sites More sharing options...
briedis Posted August 15, 2010 Report Share Posted August 15, 2010 Edzins, man nav skaidrs, kā var atlasīt ierakstu, kam viena vērtība tai pat laikā ir gan 1 gan 2?? Quote Link to comment Share on other sites More sharing options...
Kavacky Posted August 15, 2010 Report Share Posted August 15, 2010 Tur vnk kreisi implementēta kvantu DB. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.