UNION??
Ik heb het volgende probleempje. Ik wil uit twee tabellen gegevens halen. Daarvoor wil ik 1 query gebruiken. Nu gebruik ik UNION maar hij geef het verkeerd weer...??
Hij moet zeg maar vanuit tabel 1 naam, titel, jaar weergeven en vanuit de andere staat, opmerkingen
Deze query gebruik ik:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
$SQL = "SELECT
id,
nummer,
titel,
jaar,
'missende kolom',
'missende kolom'
FROM vierkleuren
WHERE
id = '$id'
UNION
SELECT
vierkleuren_id,
users_id,
eigen_jaar,
eerste_druk,
staat,
opmerkingen
FROM
vierkleuren_edit
WHERE
vierkleuren_id = '$id'
AND
users_id = ".$_SESSION['user_id']."";
$result = mysql_query($SQL);
// error afhandeling
if($result !==false){
}
else
echo mysql_error();
// end error afhandeling
while ( $db_field = mysql_fetch_assoc($result) ) {
?>
<tr>
<td rowspan="2" width="150"><a href="img/<?php echo $reeks; ?>/gr/<?php echo $db_field['nummer']; ?>.jpg" rel="lightbox" title="<?php echo $db_field['titel']; ?>" STYLE="text-decoration: none; color: #CC0000"><img src="img/<?php echo $reeks; ?>/kl/<?php echo $db_field['nummer']; ?>.gif" width="150" height="194" alt="" /></a></td>
<td rowspan="2" valign="top"><font size="+1"><b><?php echo $db_field['titel']; ?></b></font><br>
<font><b>Nummer: </b><?php echo $db_field['nummer'] ; ?></font><br>
<b>Jaar: </b><?php echo $db_field['jaar']; ?></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td colspan="2"><b>Eerste druk: </b><?php echo $db_field['eerste_druk'];?></td>
</tr>
<tr>
<td colspan="2"><b>Staat: </b><?php echo $db_field['staat'];?></td>
</tr>
<tr>
<td colspan="2"><b>Opmerking: </b><?php echo $db_field['opmerkingen'];?></td>
</tr>
$SQL = "SELECT
id,
nummer,
titel,
jaar,
'missende kolom',
'missende kolom'
FROM vierkleuren
WHERE
id = '$id'
UNION
SELECT
vierkleuren_id,
users_id,
eigen_jaar,
eerste_druk,
staat,
opmerkingen
FROM
vierkleuren_edit
WHERE
vierkleuren_id = '$id'
AND
users_id = ".$_SESSION['user_id']."";
$result = mysql_query($SQL);
// error afhandeling
if($result !==false){
}
else
echo mysql_error();
// end error afhandeling
while ( $db_field = mysql_fetch_assoc($result) ) {
?>
<tr>
<td rowspan="2" width="150"><a href="img/<?php echo $reeks; ?>/gr/<?php echo $db_field['nummer']; ?>.jpg" rel="lightbox" title="<?php echo $db_field['titel']; ?>" STYLE="text-decoration: none; color: #CC0000"><img src="img/<?php echo $reeks; ?>/kl/<?php echo $db_field['nummer']; ?>.gif" width="150" height="194" alt="" /></a></td>
<td rowspan="2" valign="top"><font size="+1"><b><?php echo $db_field['titel']; ?></b></font><br>
<font><b>Nummer: </b><?php echo $db_field['nummer'] ; ?></font><br>
<b>Jaar: </b><?php echo $db_field['jaar']; ?></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td colspan="2"><b>Eerste druk: </b><?php echo $db_field['eerste_druk'];?></td>
</tr>
<tr>
<td colspan="2"><b>Staat: </b><?php echo $db_field['staat'];?></td>
</tr>
<tr>
<td colspan="2"><b>Opmerking: </b><?php echo $db_field['opmerkingen'];?></td>
</tr>
Hoop dat jullie zien wat ik bedoel.
Hij geeft zeg maar de output twee x weer maar over die twee zijn dan ook de waardes verdeeld. Alsof hij een loop maakt. Eerst pakt hij de waardes uit tabel 1 en dan begint hij weer overnieuw en pakt hij de waardes uit tabel 2.
dubbeltopic verwijderd en code tags gewijzigd.[/modedit]
Gewijzigd op 07/10/2013 16:07:41 door Bas IJzelendoorn
Wat jij nodig hebt is waarschijnlijk een join
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
$SQL =
"SELECT
v.id,
v.nummer,
v.titel,
v.jaar,
e.vierkleuren_id,
e.users_id,
e.eigen_jaar,
e.eerste_druk,
e.staat,
e.opmerkingen
FROM vierkleuren AS v
INNER JOIN vierkleuren_edit AS e
ON (e.vierkleuren_id = '$id'
AND e.users_id = ".$_SESSION['user_id'].")";
"SELECT
v.id,
v.nummer,
v.titel,
v.jaar,
e.vierkleuren_id,
e.users_id,
e.eigen_jaar,
e.eerste_druk,
e.staat,
e.opmerkingen
FROM vierkleuren AS v
INNER JOIN vierkleuren_edit AS e
ON (e.vierkleuren_id = '$id'
AND e.users_id = ".$_SESSION['user_id'].")";
Maar bij deze zoals ik al zei laat hij alles zien wat er is en niet de spicifieke records
Je gebruik bij $id(regel 15) enkele(') horen dat geen dubbele(") te zijn?
Dan zet je die in de JOIN voorwaarden
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
:
.......
INNER JOIN vierkleuren_edit AS e
ON e.vierkleuren_id = v.id
WHERE
v.id = 12
AND
e.users_id = 4321
.......
INNER JOIN vierkleuren_edit AS e
ON e.vierkleuren_id = v.id
WHERE
v.id = 12
AND
e.users_id = 4321
Waar ik getallen heb staan zet je de waardes uit de variabelen.
Wat je eerst had was een cross join.
Gewijzigd op 07/10/2013 17:06:08 door Ger van Steenderen
Maar dan nog 1 vraag, als hij niks in de vierkleuren_edit tabel staat dan moet hij nog wel de andere info weergeven van de andere tabel. Hoe kan dat gerealiseerd worden???
Gewijzigd op 07/10/2013 20:28:15 door wes achternaam
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$SQL = "SELECT
".$reeks.".id,
".$reeks.".nummer,
".$reeks.".titel,
".$reeks.".jaar,
".$reeks."_edit.".$reeks."_edit_id,
".$reeks."_edit.users_id,
".$reeks."_edit.eigen_jaar,
".$reeks."_edit.eerste_druk,
".$reeks."_edit.staat,
".$reeks."_edit.opmerkingen
FROM
".$reeks."
LEFT JOIN
".$reeks."_edit
ON
".$reeks.".id = ".$reeks."_edit.".$reeks."_id
WHERE
".$reeks."_edit.".$reeks."_id = ".$id."
AND
".$reeks."_edit.users_id = ".$_SESSION['user_id']."";
?>
$SQL = "SELECT
".$reeks.".id,
".$reeks.".nummer,
".$reeks.".titel,
".$reeks.".jaar,
".$reeks."_edit.".$reeks."_edit_id,
".$reeks."_edit.users_id,
".$reeks."_edit.eigen_jaar,
".$reeks."_edit.eerste_druk,
".$reeks."_edit.staat,
".$reeks."_edit.opmerkingen
FROM
".$reeks."
LEFT JOIN
".$reeks."_edit
ON
".$reeks.".id = ".$reeks."_edit.".$reeks."_id
WHERE
".$reeks."_edit.".$reeks."_id = ".$id."
AND
".$reeks."_edit.users_id = ".$_SESSION['user_id']."";
?>
Het probleem blijft hetzelfde. Als in de table ".$reeks."_edit niks staat dan laat hij heleemaal niets zien terwijl ik wel wil dat hij dan uit table ".$reeks." de nummer titel en jaar laat zien want die staan er wel in.
Kan iemand mij helpen...??
Toevoeging op 08/10/2013 20:49:05:
iemand..??? Ik kom er echt niet ui. Ik heb nu inner join, left join, right join en Union geprobeerd. maar geen succes
Gewijzigd op 08/10/2013 20:50:37 door wes achternaam
Het eerste is de volgorde waarin de tabellen in de FROM clause staan.
Er is een groot verschil tussen 'niet helemaal' en 'helemaal niet', hetzelfde geldt voor een LEFT JOIN.
Het tweede is dat kolommen uit de gejoinde tabel geen waarde (NULL) hebben als niet aan de join voorwaarden wordt voldaan, als je die dan in de WHERE op een bepaalde waarde controleert .... (kan je zelf invullen)
En als aanvulling op Ger, zodat de volgende vraag direct beantwoord wordt. Als je de voorwaarde die je nu in de WHERE hebt staan alleen wil gebruiken om ervoor te zorgen dat de juiste records worden gejoined, dan kan je die voorwaarde in de ON clause van de LEFT JOIN zetten. In dat geval worden uit de _edit tabel alleen de records geselecteerd met de juiste user_id. Uit de hoofdtabel worden nog gewoon alle records geselecteerd.