Ik loop al de hele avond te stoeien met een subquery. Vroeger deed ik het in twee stappen mbv php maar het kan natuurlijk netter met een subquery.

Ik wil graag de nickname van een topic-starter ophalen uit de tabel users.

tabel users
id|nickname

tabel forum_topic
topic_id|user_id|memo

de query

<?php
$sql = "SELECT
topic_id,
user_id,
(SELECT
id,
nickname
WHERE
id = user_id
)
AS gebruikersnaam
FROM
forum_topic
WHERE
cat_id = 3
AND
topic_id = 238
";
?>

De betreffende rij bestaat, daar kan het niet aan liggen.

Ik krijg nu de error


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 'WHERE id = user_id ) AS gebruikersnaam FROM forum_topic WHERE ' at line 7


Het is de eerste subquery die ik probeer te maken, wie kan me dit zetje even geven?
In dit geval hoef je volgens mij geen gebruik te maken van een subquery. Je weet het topic id, als gevolg daarvan weet je het user_id en met een inner join kun je dan makkelijk bijbehorende nickname selecteren:


SELECT
	u.nickname
FROM
	users AS u
INNER JOIN
	forum_topics AS f
ON
	f.user_id = u.id
WHERE
	f.topic_id = 238
Aan de hand van deze oplossing van Blanche die goed werkt ben ik verder aan het zoeken naar oplossingen voor query's... Het is even wennen en ik kom er op dit moment echt niet uit.

Ik heb een tabel users, een tabel users_tochten en een tabel tochten.

Het gaat over bepaalde routes die afgelegd zijn door de gebruikers. Dit is allemaal genormaliseerd.

users_tochten:
id|tochten|users

tochten:
id|naam|datum|memo

Nu wil ik dus alle tochten selecteren van gebruiker met id 1, en sorteren op datum

Aan de hand van de tutorial van Klaasjan heb ik de volgende query in elkaar gebrouwen


SELECT
	ut.users,
	ut.tochten,
	t.id,
	t.naam,
	t.datum,
	t.memo
FROM
	users_tochten AS ut,
	tochten AS t
WHERE
	t.id = ut.tochten
AND
	ut.users = 1
ORDER BY
	t.datum DESC


Nu krijg ik de foutmelding


Unknown column 'ut.tochten' in 'field list'


Volgens mij heb ik niks anders gedaan dan de query van Klaasjan, enige verschil is dat deze niet werkt ;)

Er bestaan records voor deze opgevraagde gegevens. Dat kan het probleem niet zijn.

Ik ben heeeeel nieuwsgierig!

Slaap lekker allemaal!

edit:
leek me handig om hier in dit topic verder te gaan
typfoutje

SELECT
    ut.users,
    ut.tochten,
    t.id,
    t.naam,
    t.datum,
    t.memo
FROM
    users_tochten ut,
    tochten t
WHERE
    t.id = ut.tochten
AND
    ut.users = 1
ORDER BY
    t.datum DESC


Probeer het zo eens.
Nee, dit werkt niet. Ik krijg nog steeds dezelfde foutmelding... Nog meer opties :D
Met je query leek me opzich niets mis. Heb de situatie lokaal even nagebootst en ik krijg zoals ik al dacht geen foutmelding, ik krijg gewoon de resultaten die ik wil.

Misschien dat je toch ergens een typfoutje hebt gemaakt? De naam van de kolom tochten is ook daadwerkelijk 'tochten'?
Volgens mij moet bij die van Willem Jan nog even 2 keer AS worden toegevoegd:

FROM
users_tochten AS ut,
tochten AS t
nee hoeft niet bij tabellen
SELECT
    t.*
FROM
    users_tochten ut
LEFT JOIN
    tochten t
ON
    t.id = ut.tochten
WHERE
    ut.users = 1;
Oke, ik ga nog even probleren. Het leek mij ook al dat er niks mis was, maar omdat ik er nieuw in ben dacht ik dat het toch aan de query moest liggen. Ik ga even zoeken! Thanks guys!

Cris
Nee, niks helpt. Ook als ik de query in phpMyAdmin uitvoer krijg ik dezelfde melding.

Blanche, wat heb jij precies in je database gezet waardoor je wel goede resultaten terug kreeg. Ik heb nu het volgende:

users_tochten:

id | tochten | users
1 | 1 | 1
2 | 2 | 1

tochten:

id | naam | datum | memo
1 | test | 06-06-06 | dit is de eerste tocht
2 | boe | 06-07-06 | dit is de tweede test

Even beredereren.

Er zijn in de tabel users_tochten tochten aangetroffen met ut.users = 1
Er zijn bijbehorende tochten aangetroffen met t.id = ut.tochten

Dus wat gaat er dan nu precies fout? :D

Reageren