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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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
";
?>
$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
Quote:
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?
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
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
Quote:
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
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
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
Misschien dat je toch ergens een typfoutje hebt gemaakt? De naam van de kolom tochten is ook daadwerkelijk 'tochten'?
FROM
users_tochten AS ut,
tochten AS t
nee hoeft niet bij tabellen
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
t.*
FROM
users_tochten ut
LEFT JOIN
tochten t
ON
t.id = ut.tochten
WHERE
ut.users = 1;
t.*
FROM
users_tochten ut
LEFT JOIN
tochten t
ON
t.id = ut.tochten
WHERE
ut.users = 1;
Gewijzigd op 01/01/1970 01:00:00 door Majid Ahddin
Cris
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--
-- Table structure for table `tochten`
--
CREATE TABLE `tochten` (
`id` int(3) NOT NULL auto_increment,
`naam` varchar(255) NOT NULL,
`datum` date NOT NULL,
`memo` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `tochten`
--
INSERT INTO `tochten` (`id`, `naam`, `datum`, `memo`) VALUES (1, 'tocht1', '2006-10-23', '0000-00-00'),
(2, 'tocht2', '2006-10-24', '0000-00-00');
-- --------------------------------------------------------
--
-- Table structure for table `users_tochten`
--
CREATE TABLE `users_tochten` (
`id` int(3) NOT NULL auto_increment,
`users` int(3) NOT NULL,
`tochten` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `users_tochten`
--
INSERT INTO `users_tochten` (`id`, `users`, `tochten`) VALUES (1, 1, 1),
(2, 1, 2),
(3, 2, 2);
-- Table structure for table `tochten`
--
CREATE TABLE `tochten` (
`id` int(3) NOT NULL auto_increment,
`naam` varchar(255) NOT NULL,
`datum` date NOT NULL,
`memo` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `tochten`
--
INSERT INTO `tochten` (`id`, `naam`, `datum`, `memo`) VALUES (1, 'tocht1', '2006-10-23', '0000-00-00'),
(2, 'tocht2', '2006-10-24', '0000-00-00');
-- --------------------------------------------------------
--
-- Table structure for table `users_tochten`
--
CREATE TABLE `users_tochten` (
`id` int(3) NOT NULL auto_increment,
`users` int(3) NOT NULL,
`tochten` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `users_tochten`
--
INSERT INTO `users_tochten` (`id`, `users`, `tochten`) VALUES (1, 1, 1),
(2, 1, 2),
(3, 2, 2);
Het werkt nu nl wel :D Top! Nu even verder rommelen en uitbreiden!
Dank je wel Blanche!
Eh nee, dat mag niet uitmaken. Ik gebruik normaal ook altijd MyISAM, blijkbaar stond de instelling hier lokaal toevallig op innoDB toen ik de tabellen aanmaakte.
Oke, thx anyway :D Ben zeer geholpen hiermee