Join
Hallo! ik ben al dagen bezig om de juiste informatie uit mijn database te halen. Krijg het niet voor elkaar :s
Dit zijn mijn tabllen:
CREATE TABLE `match_item` (
`id` int(11) NOT NULL auto_increment,
`merk` varchar(100) default NULL,
`type` varchar(100) default NULL,
`bouwjaar` varchar(100) default NULL,
`kmstand` varchar(100) default NULL,
`kleur` varchar(100) default NULL,
`wbkwar` varchar(100) default NULL,
`brandstof` varchar(100) default NULL,
`bijzonder` varchar(100) default NULL,
`prijs` varchar(100) default NULL,
PRIMARY KEY (`id`)
CREATE TABLE `match_item_image` (
`id` int(11) NOT NULL auto_increment,
`item_id` bigint(11) default NULL,
`image` varchar(255) default NULL,
PRIMARY KEY (`id`)
Hij plaatst dus de plaatjes en informatie die bij de plaatjes hoort apart. Nu wil ik een overzichtje maken waar het eerste plaatje uit match_item_image komt en de informatie uit match_item. Ik krijg niet voor elkaar. Kan iemand helpen om in de goeie richting te komen?
Dit zijn mijn tabllen:
CREATE TABLE `match_item` (
`id` int(11) NOT NULL auto_increment,
`merk` varchar(100) default NULL,
`type` varchar(100) default NULL,
`bouwjaar` varchar(100) default NULL,
`kmstand` varchar(100) default NULL,
`kleur` varchar(100) default NULL,
`wbkwar` varchar(100) default NULL,
`brandstof` varchar(100) default NULL,
`bijzonder` varchar(100) default NULL,
`prijs` varchar(100) default NULL,
PRIMARY KEY (`id`)
CREATE TABLE `match_item_image` (
`id` int(11) NOT NULL auto_increment,
`item_id` bigint(11) default NULL,
`image` varchar(255) default NULL,
PRIMARY KEY (`id`)
Hij plaatst dus de plaatjes en informatie die bij de plaatjes hoort apart. Nu wil ik een overzichtje maken waar het eerste plaatje uit match_item_image komt en de informatie uit match_item. Ik krijg niet voor elkaar. Kan iemand helpen om in de goeie richting te komen?
Wat heb je al geprobeerd?
van alles haha maar dit is de laatste maar dan krijg ik een error (Column 'id' in on clause is ambiguous)
ELECT
*
FROM
match_item
JOIN match_item_image ON id = item_id
WHERE
iten_id < 1
ELECT
*
FROM
match_item
JOIN match_item_image ON id = item_id
WHERE
iten_id < 1
Je wilt in een JOIN nooit alles (*) selecteren, selecteer gewoon de nodige velden, en alles komt goed. Gebruik een AS (alias) voor de velden waarop je JOINed.
Die foutmelding wordt veroorzaakt omdat er al een gelijknamig veld in je result terrecht komt.
Die foutmelding wordt veroorzaakt omdat er al een gelijknamig veld in je result terrecht komt.
Gewijzigd op 25/11/2011 01:31:21 door - Ariën -
uhm dat werkt niet. krijg ik dezelfde fout. Deze werkt wel alleen laat hij dan alle plaatjes zien
SELECT
*
FROM
match_item
JOIN match_item_image ON match_item.id = match_item_image.item_id
heb met WHERE item_id < 1 geprobeerd alleen dan laat hij alle plaatje met item_id 1 zien
SELECT
*
FROM
match_item
JOIN match_item_image ON match_item.id = match_item_image.item_id
heb met WHERE item_id < 1 geprobeerd alleen dan laat hij alle plaatje met item_id 1 zien
Waarom selecteer je wederom 'alles'?
SELECT merk, type, bouwjaar, kmstand, wbkwar, brandstof, prijs, image
FROM match_item
JOIN match_item_image ON match_item.id = match_item_image.item_id
WHERE match_item_image.item_id < 2
Dit werkt ook wel maar dan krijg ik als nog een hele lijst met alle plaatjes. de item_id word niet gelinkt aan de id van match_item. Misschien komt dit door de array waar ik hem inplaats?
FROM match_item
JOIN match_item_image ON match_item.id = match_item_image.item_id
WHERE match_item_image.item_id < 2
Dit werkt ook wel maar dan krijg ik als nog een hele lijst met alle plaatjes. de item_id word niet gelinkt aan de id van match_item. Misschien komt dit door de array waar ik hem inplaats?
Gewijzigd op 25/11/2011 02:36:34 door Emiel de Beer
Dat "kan" komen doordat je nu in de where clause een veld gebruikt uit de gejoinde tabel en niet uit de main tabel. Dus je kan eens proberen om ipv
"WHERE match_item_image.item_id < 2"
de where clause op de eerste tabel toe te passen
"WHERE match_item.id < 2".
"WHERE match_item_image.item_id < 2"
de where clause op de eerste tabel toe te passen
"WHERE match_item.id < 2".
ok
Gewijzigd op 25/11/2011 08:51:20 door Stephan Dorst
Had ik ook al geprobeerd. Helaas werkt dat ook niet. Zelfde resultaat.
Gewijzigd op 25/11/2011 09:03:09 door Emiel de Beer
Hoeveel items heb je in de DB, hoeveel plaatjes (en hoeveel normaal gesproken per item) en hoeveel krijg je eruit als je verschillende opties in je where clause opneemt. < 2, = 2 etc?
Je moet ook altijd een tabel.col syntax gebruiken:
Met een left join voorkom je dat als er geen image bij een item is dit wordt overgeslagen
Code (php)
1
2
3
4
5
2
3
4
5
SELECT m.merk, m.type, m.bouwjaar, p.image
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
WHERE m.id = 1
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
WHERE m.id = 1
Met een left join voorkom je dat als er geen image bij een item is dit wordt overgeslagen
Gewijzigd op 25/11/2011 12:22:16 door Ger van Steenderen
Ik ben nu nog op mijn werk maar ik ga het gelijk proberen als ik thuis ben.
Toevoeging op 25/11/2011 14:06:37:
Helaas weer niet! hij laat alsnog alle plaatjes zien met de info erbij. ik twijfel nu of het niet aan mijn array ligt. Voor de zekerheid de hele code.
dit is het resultaat klik
Toevoeging op 26/11/2011 01:32:03:
Heb het eindelijk voor elkaar!!!
Dit is hem geworden uiteindelijk:
Toevoeging op 25/11/2011 14:06:37:
Helaas weer niet! hij laat alsnog alle plaatjes zien met de info erbij. ik twijfel nu of het niet aan mijn array ligt. Voor de zekerheid de hele code.
dit is het resultaat klik
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
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
<?php
include("admin/config.php");
//Gegevens uit MySQL halen
$data = mysql_query("SELECT m.merk, m.type, m.bouwjaar, p.image
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
WHERE m.id = 1
") or die(mysql_error());
//array voor een 1 auto
while($info = mysql_fetch_array( $data ))
{
?>
<table width="750" height="75">
<tr>
<td height="75" width="120" rowspan="2"><?php Print "<img src=/admin/images/".$info['image'] . " height='75' width='120'>"; ?></td>
<td height="25" width="630" Valign="top"><?php Print " ".$info['merk'] . " ".$info['type'] . " "; ?></td>
</tr>
<tr>
<td height="50" width="630" Valign="top">info</td>
</tr>
</table>
<?php } ?>
include("admin/config.php");
//Gegevens uit MySQL halen
$data = mysql_query("SELECT m.merk, m.type, m.bouwjaar, p.image
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
WHERE m.id = 1
") or die(mysql_error());
//array voor een 1 auto
while($info = mysql_fetch_array( $data ))
{
?>
<table width="750" height="75">
<tr>
<td height="75" width="120" rowspan="2"><?php Print "<img src=/admin/images/".$info['image'] . " height='75' width='120'>"; ?></td>
<td height="25" width="630" Valign="top"><?php Print " ".$info['merk'] . " ".$info['type'] . " "; ?></td>
</tr>
<tr>
<td height="50" width="630" Valign="top">info</td>
</tr>
</table>
<?php } ?>
Toevoeging op 26/11/2011 01:32:03:
Heb het eindelijk voor elkaar!!!
Dit is hem geworden uiteindelijk:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
//Gegevens uit MySQL halen
$data = mysql_query("SELECT m.merk, m.type, m.bouwjaar, p.image
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
GROUP BY p.item_id ORDER BY m.id
$data = mysql_query("SELECT m.merk, m.type, m.bouwjaar, p.image
FROM match_item AS m
LEFT JOIN match_item_image AS p
ON m.id = p.item_id
GROUP BY p.item_id ORDER BY m.id
Gewijzigd op 25/11/2011 14:20:00 door Emiel de Beer




