[miCkE]Medlem sedan okt. 200133 inlägg
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
LarsGMedlem sedan dec. 200012 465 inlägg
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
[miCkE]Medlem sedan okt. 200133 inlägg
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..
agneta_rungMedlem sedan juli 2002138 inlägg
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
[miCkE]Medlem sedan okt. 200133 inlägg
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
agneta_rungMedlem sedan juli 2002138 inlägg
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
[miCkE]Medlem sedan okt. 200133 inlägg
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
agneta_rungMedlem sedan juli 2002138 inlägg
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...
[miCkE]Medlem sedan okt. 200133 inlägg
Hej Agneta.. och TACK!
Din FIND_IN_SET gjorde susen.. avslutade med en "group by"..
Sure thing..! Tack.. Skiitbra.. Nu funkar det!
/Micke..
agneta_rungMedlem sedan juli 2002138 inlägg