Kom ihåg mig?

MySQL/PHP Tagg-system

Ämnesverktyg Visningsalternativ
Oläst 2013-09-06, 12:21 #1
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
Standard MySQL/PHP Tagg-system

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.
jejje.net är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 12:39 #2
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
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?
ANttila är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 12:51 #3
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
Citat:
Ursprungligen postat av ANttila Visa inlägg
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?
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.
jejje.net är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 13:10 #4
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
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"
Eller utan joins:

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";
Du måste se till att länka ihop tabellerna. (Så dom har en relation till varandra)

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 13:15
ANttila är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 13:25 #5
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
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?
jejje.net är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 13:32 #6
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
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.
ANttila är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-09-06, 13:57 #7
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
jejje.net jejje.net är inte uppkopplad
Nykomling
 
Reg.datum: May 2013
Inlägg: 33
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.
jejje.net är inte uppkopplad   Svara med citatSvara med citat
Svara

Taggar
mysql, php


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:49.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017