PDA

Bekijk Volledige Versie : mysql: LEFT JOIN icm LIKE....



jeroen2496
10/11/08, 20:16
Ik heb het volgende



SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total
FROM reg_reg reg
LEFT JOIN reg_branche branche ON reg.branche_code ON branche.code


Maar zou het graag als volgt willen doen:



SELECT reg.id, reg.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total
FROM reg_reg reg
LEFT JOIN reg_branche branche ON reg.branche_code LIKE '%,'branche.code',%'



Let op de LIKE in de LEFT JOIN.... is dit mogelijk? Het lukt iig niet, hoe zou het wel kunnen lukken?

Ramon Fincken
10/11/08, 20:30
je syntax is ook raar


tis
WHERE/AND/OR veldnaam LIKE ('% var %')


oftewel prop nog een veldnaam voor LIKE

update en ON werkt als
table1.veldnaam = (operator hier) table2.veldnaam2

Triloxigen
10/11/08, 20:43
'%,'branche.code',%'

Daar gaat het fout.. teveel quotes.
mysql_error() gebruiken (bij php) helpt dit soort fouten vinden.

jeroen2496
10/11/08, 21:05
Daar gaat het fout.. teveel quotes.
mysql_error() gebruiken (bij php) helpt dit soort fouten vinden.

Oeps, das even een te snel typefoutje op het forum ;)
Maar overal zie ik dat LIKE niet mogelijk is, alleen in WHERE
Maar is dat voor mij wel weer van toepassing, aangezien ik op dit veld een zoekactie wil doen?

Ramon Fincken
10/11/08, 21:06
Nouja die ON dus pakken zoals ie hoort en dan nog een WHERE erachter

zorg dat je indexen goed staan!

zie ook hier, goede uitleg : http://www.w3schools.com/sql/

Cakkie
10/11/08, 22:49
Je kan perfect een JOIN doen met een LIKE in hoor, uiteindelijk moet gewoon de expressie die je in je ON geeft op true uitkomen om te matchen. Met een WHERE ga je trouwens een verkeerd resultaat geven.

Probeer zo eens iets:
LEFT JOIN reg_branche branche ON reg.branche_code LIKE CONCAT('%', branche.code, '%')

frvge
11/11/08, 00:14
LEFT JOIN reg_branche branche ON reg.branche_code WHERE reg.branche_code LIKE CONCAT('%', branche.code, '%')
?

Cakkie
11/11/08, 12:08
Dat is enkel het relevante deel van zijn SQL statement, de rest heb ik gewoon even weggelaten...

frankske
12/11/08, 12:21
Los van de syntax moet je je afvragen of je dit echt wil doen. MySQL kan op geen enkele manier queries als foo like "%,bar,%" optimaliseren en kan er geen indexen voor gebruiken. Geen probleem als je een paar honderd rijtjes gaat opvragen. Heb je echter een wat grotere database, is dit gegarandeerd de beste manier om je site helemaal plat te leggen!

Maak niet beter een merge-tabel?

Ramon Fincken
12/11/08, 13:07
even op frankske inhakend... je zou een SELECT id FROM ...WHERE .. LIKE kunnen doen
dat tussen haakjes zetten en dan in je main select iets als

SELECT [ je velden die je nodig hebt ] FROM maintable WHERE foreign_keybranche_code IN ( [ en dan hier die 1e select ) ]

jeroen2496
12/11/08, 13:40
SELECT branches.code AS branches_code, branches.name AS branches_name, COUNT(*) AS total_count
FROM dbreg_branches_dbreg reg_branche
LEFT JOIN dbreg_branches branches ON reg_branche.brancheID = branches.id
WHERE reg_branche.dbregID IN (".$dbregID." 0) GROUP BY branches.code LIMIT 10



Ik heb een 2e tabel aangemaakt, waar per dbregID een brancheID staat, dus dit kunnen meerdere rijen zijn. Werkt als een zonnetje! :)

RedoX
12/11/08, 22:00
Heel simpel gezegd, kan je geen LIKE gebruik i.c.m. een JOIN.

Waarom niet? 1 regel van tabel A kan altijd maar gekoppeld zijn aan 1 regel van tabel B (daarom word hier ook vaak op een ID gejoined). Zonder JOIN en wat omslachtige PHP code is dit vast te omzeilen. Als ik jou was zou ik niet naar een MySQL oplossing zoeken, maar je database maar is op orde stellen.

Cakkie
12/11/08, 23:06
Heel simpel gezegd, RedoX kan beter zijn SQL en database kennis maar is op orde stellen ;)

De meest voorkomende vorm van een relatie is een één-op-veel, waar er in 1 ahv een unieke ID gejoined wordt op een andere tabel, waar die ID meerdere keren kan voorkomen.

RedoX
12/11/08, 23:40
@Cakkie, ok zoals het er staat heb je inderdaad geleik. Ik was vergeten het woord waarde erbij te typen. Dan kom je dus op..


1 regel-waarde van tabel A kan altijd maar gekoppeld zijn aan 1 regel-waarde van tabel B (daarom word hier ook vaak op een ID gejoined).

jeroen2496
13/11/08, 08:22
@redox, een post hoger zie je hoe ik het nu heb aangepast :)