FAQ |
Kalender |
2013-09-06, 13:21 | #1 | ||
|
|||
Nykomling
|
Hej alla på WN!
Jag försöker att bygga ett tagg-system liknande Wordpress. Men jag förstår inte riktigt hur jag ska formulera MySQL syntaxen, och skulle uppskatta lite hjälp på den fronten. Jag har googlat en del, men haft svårt att förstå koden och därför inte kunnat applicera det på mitt egna script. Jag har en databas med 3 tabeller: imgs - Min tabell med bilder. id_imgs - Primarykey title - Titel för bild tags - Tabell med taggarna id_tags - Primarykey safe_tag - Taggnamnet för url-friendly tag_name - Riktiga namnet på taggen tags_ref - Tabell med referens över taggar och bild id_tags_ref - Primarykey (nog överflödig, men känner ändå att kan va bra att ha) tag_id - ID nummer för vilken tagg ifrån 'tags'-tabellen med foreignkey row_id - ID nummer för vilken bild 'imgs'-tabellen den tillhör Jag har sett olika sätt att göra det på, men tror att det är någon av de alla olika JOIN jag ska använda. Men när jag läser igenom andras syntax så blir jag bara förvirrad. Någon som kan hjälpa mig hur min query ska se ut, och försöka förklara den så jag förstår? Har nu suttit i flera dagar och googlat, och provat utan att få något vettigt resultat. Har lite tidigare erfarenhet av PHP/MySQL men aldrig egentligen använt mig av JOINS eller one-to-many-relationship. |
||
Svara med citat |
2013-09-06, 13:39 | #2 | ||
|
|||
Medlem
|
Vad är det för resultat du vill ha?
Taggar till en specifik bild? Alla bilder med tillhörande taggar? Bilder som har en specifik tagg? |
||
Svara med citat |
2013-09-06, 13:51 | #3 | ||
|
|||
Nykomling
|
Jag vill få fram alla bilder med te.x. taggen "katter". Men kommer också behöva visa alla taggar för en specifik bild, men framförallt är det det visa alla bilder av en tagg. Får jag förståelse för hur jag ska använda syntaxen så borde detta falla på plats.
|
||
Svara med citat |
2013-09-06, 14:10 | #4 | ||
|
|||
Medlem
|
Kod:
SELECT imgs.title FROM imgs LEFT JOIN tags_ref ON imgs.id = tags_ref.row_id LEFT JOIN tags ON tags_ref.tag_id = tags.id WHERE tags.tag_name = "katt" Kod:
SELECT imgs.title FROM tags, tags_ref, imgs WHERE tags_ref.tag_id = tags.id AND imgs.id = tags_ref.row_id AND tags.tag_name = "katt"; Någon pedagogisk förklaring kan jag inte bidra med tyvärr, då jag är sämst på att förklara hur det fungerar. EDIT: Läs om hur LEFT JOIN fungerar, så borde du förstå hur den skapar relationer Om du är van vid att göra dessa utan joins så kan du jämföra de två versionerna jag skapade och kanske få bättre förståelse. Senast redigerad av ANttila den 2013-09-06 klockan 14:15 |
||
Svara med citat |
2013-09-06, 14:25 | #5 | ||
|
|||
Nykomling
|
Sjukt nice, körde det MySQL Workbench och fick fram rätt resultat. Nu när jag har en fungerande kod kan jag utgå ifrån denna för att få ett mycket bättre begrepp om hur JOINS fungerar.
Det jag har haft störst problem med är i vilken ordning de ska slås ihop. Du anar inte hur tacksam jag är - suttit så länge för att försöka få det här att gå ihop! Jag har endast testat det övre exemplet - är det någon fördel/nackdel att använda joins över det andra? |
||
Svara med citat |
2013-09-06, 14:32 | #6 | ||
|
|||
Medlem
|
Jag tror att köra allt i en WHERE är en utdaterad metod.
I princip så börjar du med FROM, från antingen imgs eller tags Sen gör ju en LEFT JOIN med den mellanliggande tabellen tags_ref. Slutar med LEFT JOIN på det som blev över från steg 1. Det fungerar åt båda hållen. Vad som är bäst vet jag inte. |
||
Svara med citat |
2013-09-06, 14:57 | #7 | ||
|
|||
Nykomling
|
Okay, tackar så mycket! Håller nu på för fullt att bygga klart mitt tag-system och det går som på räls just nu. Kommer nog att använda denna post som referens punkt för mina näst kommande joins.
|
||
Svara med citat |
Svara |
|
|