1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | productentabel | id | productnaam | | 1 | Apparaat 1 | | 2 | Apparaat 2 | | 3 | Apparaat 3 | | 4 | Accessoire 1 | | 5 | Accessoire 2 | Dus als accessoire 1 bij product 2 en 3 hoort en accessoire 2 bij product 1 en 2 dan zal het als volgt moeten in een relatietabel? productenrelatiestabel | id | accessoire_id | gerelateerd_product_id | | 1 | 4 | 2 | | 2 | 4 | 3 | | 3 | 5 | 1 | | 4 | 5 | 2 | |
quote:Op donderdag 5 april 2012 13:06 schreef GlowMouse het volgende:
maar dan zonder id in de tweede tabel
Dus 'id' is niet verplicht in een tabel? Nou mooi, kan die weg.quote:Op donderdag 5 april 2012 13:09 schreef Catch22- het volgende:
en je maakt van accessoire_id en product_id (niet gerelateerd_product_id) een composite key. Hiermee dwing je uniqueness af.
Met een koppeltabel geef je aan welke 2 entiteiten bijelkaar horen. Deze combinatie is uniek. Dit stel je in door een composite key te gebruiken. Hierdoor heeft die rij niet nog een eigen id nodig, want zijn unique identifier is de composite keyquote:Op donderdag 5 april 2012 13:33 schreef Crutch het volgende:
[..]
[..]
Dus 'id' is niet verplicht in een tabel? Nou mooi, kan die weg.
En wat Catch22- zegt, bedoel je daarmee dat ik een kolom moet toevoegen waarin ik aangeef bij welk product(id) deze niet hoort?
Wat is daar het praktisch nut van?
Oh, lol. Die kolomnamen zijn hier puur ter illustratie.quote:Op donderdag 5 april 2012 13:55 schreef KomtTijd... het volgende:
hij bedoelt dat het woordje "gerelateerd" een beetje onzinnige toevoeging is aan de kolom-naam. Beter weglaten.
En als tweede bedoelt hij, dat je een key ook over meerdere kolommen kan defineren. Daarom is de kolom ID overbodig. Aangezien de combinatie [accessoire_id + product_id] sowieso al uniek is.
Je hebt 2 hoofdtabellen:quote:Op donderdag 5 april 2012 14:05 schreef Crutch het volgende:
Maar hoe werkt zo'n composite key?
Kan iemand mij een voorbeeld geven?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT Users.*, Rights.name FROM Users INNER JOIN UserRights ON UserRights.user_id = Users.id INNER JOIN Rights ON Rights.id = UserRights.right_id WHERE Users.id = 1 |
quote:Op donderdag 5 april 2012 14:05 schreef Crutch het volgende:
Maar hoe werkt zo'n composite key?
Kan iemand mij een voorbeeld geven?
1 2 3 4 5 6 | CREATE TABLE `user_rights` ( `user_id` INT NOT NULL , `right_id` INT NOT NULL , PRIMARY KEY(`user_id`, `right_id`) , INDEX (`right_id`) ); |
1 2 3 4 5 6 | SELECT parent.name AS parentName, products.* FROM nested_menu AS node, nested_menu AS parent, produkten AS products WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.menu_id = products.product_menu AND products.highlight=1 GROUP BY product_id ORDER BY parentName, first_price ASC |
1 | AND node.lft > parent.lft IF product_id <van deze rij> != product_id <vorige rij> |
Je kunt hier even kijken (al lijkt je query er al een beetje op)quote:Op donderdag 5 april 2012 23:07 schreef Swetsenegger het volgende:
Ik heb weer eens een query vraagje.
Ik heb een nested set model en nu wil ik van een bepaald groepjes nodes de parent naam achterhalen
[ code verwijderd ]
Dit werkt bijna Het gaat mis bij nodes die 2 niveaus diep zitten.
aan deze query moet een where worden toegevoegd:
[ code verwijderd ]
is dit uberhaupt mogelijk?
Is het niet makkelijker om te stellen dat node.id != parent.id ? Volgens mij ben je er al als je dat toeveoegt aan je query.quote:Op donderdag 5 april 2012 23:07 schreef Swetsenegger het volgende:
Ik heb weer eens een query vraagje.
Ik heb een nested set model en nu wil ik van een bepaald groepjes nodes de parent naam achterhalen
[ code verwijderd ]
Dit werkt bijna Het gaat mis bij nodes die 2 niveaus diep zitten.
aan deze query moet een where worden toegevoegd:
[ code verwijderd ]
is dit uberhaupt mogelijk?
Als je de indexen goed hebt, kun je behoorlijk grote query's nog snel uitvoeren. Meerdere query's maken kan ook, maar dat vereist weer extra logica in PHP en die kost ook tijd.quote:Op donderdag 5 april 2012 23:16 schreef totalvamp het volgende:
[..]
Je kunt hier even kijken (al lijkt je query er al een beetje op)
http://stackoverflow.com/(...)e-children-of-a-node
Eerlijk gezegd zet ik nooit alles in 1 grote query vaak maakt dit dingen alleen maar langzamer dan bijvoorbeeld een paar losse (niet altijd hoor).
Nee, zelfde probleem... als je maar 1 niveau diep bent klopt dat namelijk wel.quote:Op donderdag 5 april 2012 23:25 schreef Light het volgende:
[..]
Is het niet makkelijker om te stellen dat node.id != parent.id ? Volgens mij ben je er al als je dat toeveoegt aan je query.
Hmm... 't klinkt wel als een leuk probleemquote:Op vrijdag 6 april 2012 20:38 schreef Swetsenegger het volgende:
[..]
Nee, zelfde probleem... als je maar 1 niveau diep bent klopt dat namelijk wel.
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.quote:Op vrijdag 6 april 2012 22:02 schreef Light het volgende:
[..]
Hmm... 't klinkt wel als een leuk probleem
Da's ook een optie natuurlijk. Maar ik wil wel proberen een nettere oplossing te vinden. Moet ik alleen eerst die tabelstructuur voor mezelf helder krijgen.quote:Op vrijdag 6 april 2012 22:05 schreef Swetsenegger het volgende:
[..]
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.
Niet mooi zeker niet binnen de elegante nested set oplossing, wel effectief.
http://crisp.tweakblogs.n(...)-only-one-query.htmlquote:Op vrijdag 6 april 2012 22:05 schreef Swetsenegger het volgende:
[..]
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.
Niet mooi zeker niet binnen de elegante nested set oplossing, wel effectief.
Ow maar mijn menu tree opbouwen doe ik ook met 1 query.quote:Op vrijdag 6 april 2012 22:32 schreef GlowMouse het volgende:
[..]
http://crisp.tweakblogs.n(...)-only-one-query.html
1 2 3 4 5 6 | SELECT parent.".$menuName." AS parentname, node.menu_id, node.".$menuName." AS name, node.lft, node.rgt, ( COUNT( parent.".$menuName." ) -1) AS depth FROM nested_menu AS node, nested_menu AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.menu_id ORDER BY node.lft |
Ow vast, maar ik heb nu een menu tree waar je zonder problemen items tussen kan voegen, kan deleten, op kan schuiven, etc.quote:Op vrijdag 6 april 2012 22:43 schreef GlowMouse het volgende:
Jouw query is lelijker omdat hij niet via indices gesorteerd kan worden.
1 | UPDATE image SET path = UPDATE(path, d:/dir/dir2,g:/dir/dir2); |
quote:Op zaterdag 7 april 2012 11:42 schreef smegmanus het volgende:
Ik wil een path veranderen (voor een applicatie die foto's weg schrijft naar een bepaalde dir) en gebruik het volgende command:
[ code verwijderd ]
Het werkt echter niet, wat doe ik verkeerd?
1 2 3 | UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value |
1 2 3 | UPDATE image SET path = "d:/dir/dir2" WHERE id=xx |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |