Jump to content
php.lv forumi

tabulas kolonnas no citas tabulas rindu mainīgajiem


Recommended Posts

Posted

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.

Posted

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} ?

Posted

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

Posted (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 by codez
Posted

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

Posted

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 :) )

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...