Archief - mysql: subquery

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Incinnerator

Legacy Member
Yu allemaal

situatie:

tabel functies: C_F_ID , C_F_Naam
tabel Members_Functie: M_F_ID, M_ID
tabel Members: M_ID, M_Nickname

ik ben bezig met een pagina waarin je gegevens van je profiel kan wijzigen.
op die pagina is het de bedoeling dat je door middel van een keuzelijst functies kan toevoegen.
Nu wil ik de functies die een bepaalde persoon al heeft toegevoegd niet meer terugzien in de lijst met functies om toe te voegen.

dus als je een lijst hebt met appelen, peren
en hij voegt appelen toe dan moet de lijst enkel nog peren weergeven

Ik dacht dus aan een subquery waarbij de binnenste alle functies ophaalt van die bepaalde member en de buitenste query moet dan vgl of de functie die hij ophaalt (uit de tabel functies) overeenkomt met resultaat van binnenste query

als de functie erin staat moet hij het dus niet naar de resultatentabel sturen en anders wel.

PHP:
$sql2 = mysql_query("SELECT * FROM C_Functies 
WHERE C_Functies.C_F_ID 
NOT IN 
(SELECT M_F_ID FROM C_Members_Functie WHERE M_ID = $ophaalid)")

de binnenste query werkt , heb dit apart getest
de fout die hij geeft:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT M_F_ID FROM C_Members_Functie WHERE M_ID = 1)' at line 1

Kan iemand helpen aub?

Thx
Incinnerator

Hit Hard

Legacy Member
Probeer de volgende query anders eens uit te voeren, dan weet je weer iets meer over de oorsprong van de fout.

Code:
SELECT * FROM C_Functies
WHERE C_Functies.C_F_ID
NOT IN
('F1', 'F2')
'F1' en 'F2' vervangen door bestaande codes natuurlijk ;) .

Incinnerator

Legacy Member
dat werkt, hier is ook geen subquery aanwezig

ik heb wel dit gevonden om mysql.com

With MySQL versions prior to 4.1, it was necessary to work around or avoid the use of subqueries. In many cases, subqueries can successfully be rewritten using joins and other methods. See Section 13.1.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”.

killgore

Legacy Member
"SELECT * FROM C_Functies JOIN C_Members_Functie cmf ON cmf.M_ID=$ophaalid
WHERE C_Functies.C_F_ID != cmf.M_F_ID"

zoiets? je kan het ook herschrijven voor NOT IN denk ik

Incinnerator

Legacy Member
Merci Killgore

uwe query is zo goed als juist :)

er is nog wel een verschijnsel
Als alle waarden uit C_functies bij een persoon zijn toegevoegd
dan laadt hij alle waarden van functies in de keuzelijst en dat zouden er geen moeten zijn.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan