Jump to content
php.lv forumi

tabulas kolonnas no citas tabulas rindu mainīgajiem


Edzins

Recommended Posts

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...