webForumDet fria alternativet

Problem med SET

Databaser & SQLur Databashanterare & SQL

9 svar · 211 visningar · startad av [miCkE]

Medlem sedan okt. 200133 inlägg
Frågan#1

Hej..
Brottas nu med datatypen SET.
Har bara plockat ut/jämfört med SET-värden i vanlig select-sats tidigare, men nu rör det sig om en inner-join..
Det funkar bara icke!
Kolumnen som är satt till datatypen SET är b.fld_pageid i följande sats nedan.

SELECT b.id, b.fld_title, b.fld_click, b.fld_status, b.fld_views, p.fld_title FROM $tbl_9 AS b INNER JOIN $tbl_2 AS p ON p.id LIKE '%b.fld_pageid%' WHERE b.fld_node = $my_node

Tacksam för vägledning..
/Micke

Medlem sedan dec. 200012 464 inlägg
#2

Varför använder du like i en join?

SELECT b.id, b.fld_title, b.fld_click, b.fld_status, b.fld_views, p.fld_title FROM $tbl_9 AS b INNER JOIN $tbl_2 AS p 
ON p.id = b.fld_pageid WHERE b.fld_node = $my_node
Medlem sedan okt. 200133 inlägg
#3

Jag har datatypen SET i kolumnen b.fld_pageid vilken ju tillåter multipla, kommaseparerade värden.
I detta fallet vill jag att den ska ta: 1,3,6,9.
Så som du skrev funkar och har funkat för mig när jag lagrar enbart ett tal i SET, INT eller motsvarande.

Problemet uppstår när jag har många värden i SET och ska joina med ett annat tal i kolumnen p.id.

Enligt manualen ska jag använda LIKE när jag gör min SELECT, typ:
SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

Varför funkar det inte med en INNER JOIN.. Kan jag skriva det på annat sätt?

/Mr. Mike..

Medlem sedan juli 2002145 inlägg
#4

Följande kod kanske:

SELECT b.id, b.fld_title, b.fld_click, b.fld_status, b.fld_views, p.fld_title
FROM $tbl_9 AS b, $tbl_2 AS p
WHERE p.id LIKE '%b.fld_pageid%'
AND b.fld_node = $my_node

Medlem sedan okt. 200133 inlägg
#5

Nope.. funkar icke det heller..
Grejen e' att det funkar bra vid enbart ett lagrat tal i SET..
Vid flera så skiter det sig..
Blir tokig på detta..

/Micke

Medlem sedan juli 2002145 inlägg
#6

Hmm, om det är b.fld_pageid som innehåller SET ska det kanske vara så här i stället:

SELECT b.id, b.fld_title, b.fld_click, b.fld_status, b.fld_views, p.fld_title
FROM $tbl_9 AS b, $tbl_2 AS p
WHERE b.fld_pageid LIKE '%p.id%'
AND b.fld_node = $my_node

Medlem sedan okt. 200133 inlägg
#7

Då jag tidigare laborerat med ett flertal värden så har jag
nu testat med enbart två värden (1,2) och då funkar det..
Om jag däremot lagrar tre eller fler värden så funkar det icke!

Följande sats har jag nu:
.. INNER JOIN $tbl_2 AS p ON p.id = b.fld_pageid ..
Funkar även med din första select-sats Agneta..

Lägger till i db med enkla citationstecken: fld_pageid = '$sel_pageid'
Värdet hämtas från selectlista: <option value="1,2,3,4">
Har även testat att manuellt skriva in..

/Micke

Medlem sedan juli 2002145 inlägg
#8

Jamen, är vi inte ute och cyklar båda två?? :) Det vi försöker jämföra med ( '%p.id%' ) tolkas väl bara som en sträng vilken som helst??! Och strängen "p.id" återfinns ju inte i SETet!!

Har du provat FIND_IN_SET ?

Det skulle väl se ut så här:

SELECT b.id, b.fld_title, b.fld_click, b.fld_status, b.fld_views, p.fld_title
FROM $tbl_9 AS b, $tbl_2 AS p
WHERE FIND_IN_SET(p.id,b.fld_pageid)>0
AND b.fld_node = $my_node

Annars funkar säkert den senare av ovanstående SELECTer om man bara bygger ihop en sträng i villkoret. Nå't i stil med WHERE b.fld_pageid LIKE '%' + p.id + '%'. Exakt syntax för det har jag ingen aning om...

Annars har jag slut på idéer...

Medlem sedan okt. 200133 inlägg
#9

Hej Agneta.. och TACK!
Din FIND_IN_SET gjorde susen.. avslutade med en "group by"..
Sure thing..! Tack.. Skiitbra.. Nu funkar det!
/Micke..

Medlem sedan juli 2002145 inlägg
#10

Härligt!! :e

137 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)