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/
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, '%')
LEFT JOIN reg_branche branche ON reg.branche_code WHERE reg.branche_code LIKE CONCAT('%', branche.code, '%')
?
Dat is enkel het relevante deel van zijn SQL statement, de rest heb ik gewoon even weggelaten...
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! :)
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.
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.
@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 :)