Hallo,

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:


<?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>&nbsp;</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.

De query doet exact wat jij vertelt wat ie moet doen, namelijk iets uit de ene tabel selecteren en daarna iets uit de andere tabel.
Wat jij nodig hebt is waarschijnlijk een join
ik had ook een join gemaakt maar dan laat hij alles zien.


$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'].")";


Maar bij deze zoals ik al zei laat hij alles zien wat er is en niet de spicifieke records
Als de query niet in PHP werkt probeer hem dan de query op de database (zonder php).

Je gebruik bij $id(regel 15) enkele(') horen dat geen dubbele(") te zijn?
Ik neem aan dat er een relatie bestaat tussen de tabellen via id->vierkleuren_id?
Dan zet je die in de JOIN voorwaarden
:
.......
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.

Hij doet het. Hartstikke bedankt!!!!!

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???
nou ik heb t gelezen en volgens mij moet ik de left join hebben. dus ik heb de volgende query gemaakt:


<?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']."";
?>


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...??

[size=xsmall]Toevoeging op 08/10/2013 20:49:05:[/size]

iemand..??? Ik kom er echt niet ui. Ik heb nu inner join, left join, right join en Union geprobeerd. maar geen succes
Er zijn twee dingen waarbij je rekening moet houden bij een LEFT JOIN.

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.

Reageren