Ik zit me suf te denken en te zoeken naar het volgende

tabel 1
[table]
[tr][td]id[/td][td]naam[/td][/tr]
[tr][td]250[/td][td]Skatebkard[/td][/tr]
[tr][td]345[/td][td]skateboard-100x100.png[/td][/tr]
[/table]

table 2
[table]
[tr][td]id[/td][td]postid[/td][td]value[/td][/tr]
[tr][td]203[/td][td]250[/td][td]rood[/td][/tr]
[tr][td]204[/td][td]250[/td][td]345[/td][/tr]
[/table]

Ik wil zowel de value als de link van de afbeelding hebben.
Maar beide tabellen hebben iets van deze informatie.
Als ik een query voor Skateboard dan kan ik met een JOIN de value ophalen, maar hoe refereer ik weer terug van tabel 2 naar 1 voor afbeeldingsurl?
Ik wil dus de value rood hebben en skateboard-100x100.png.
De value 345 in tabel 2 is de ID in tabel 1 van de URL

Wie kan mij helpen hiermee?
Maar met 'rood' kan je weer geen relatie aanleggen met een ID-veld.
Ligt je relatie niet tussen Tabel1.id en tabel2.postid?
Rood kan ik ophalen door de link te leggen met de id van tabel1 naar tabel2 postid.

Maar ik zoek om ook weer terug te kunnen. Laat me dit even duidelijker uitleggen.

Ik filter dan even op skateboard van tabel 1.
Ik refereer met de id (250 )van skateboard naar tabel2, de match is dan in de kolom postid.
Dit zou 2 resultaten opleveren, namelijk id 203 en 204.
203 heeft de value rood en 204 heeft de value 345.
Die 345 is de ID van de afbeeldings URL in tabel1 en die wil ik ook graag hebben.
Als je dat veld meeneemt in je SELECT, dan kan je die ook gebruiken.
Godnondejuuuu ... ik verzend het bericht ... error en m'n complete reactie is pleite!



Nogmaals dan maar even in het heel kort.

In tabel 1 gebruik je een en hetzelfde veld (naam) voor zowel een productnaam als een afbeeldings-url. Dat klopt niet. Een veld moet altijd dezelfde inhoud hebben. In dit geval kun je bijv. een veld img-url toevoegen waarin dan de url komt te staan in dezelde rij.
Doe het in 2 keer :

 SELECT * FROM tabel1 t1
JOIN tabel2 t2
ON t1.id = t2.postid
WHERE t2.value REGEXP '^[^0-9]+$';

SELECT * FROM tabel1 t1
JOIN tabel2 t2
ON t1.id = t2.value
WHERE t2.value REGEXP '^[0-9]+$';
@Adoptive

Het hele principe klopt toch niet? Of ben ik nu gek? Je kan toch niet in één-en-dezelfde kolom de ene keer een productnaam hebben staan en de andere keer een afbeeldings-url?
is inderdaad een heel rare benadering.

Je zou nog tabel2 kunnen voorzien van een extra kolom die aangeeft of het een eigenschap (kleur) is, of dat het om een afbeelding (of review of weet ik wat) gaat.

En dan zou tabel1 "entiteiten" bevatting. Dingen dus. Dus het ding "product" of het ding "afbeelding"

Logischer zou ik vinden, om in tabel2 onder "value" de afbeelding te noemen (foto.jpg) en ook dat extra veld dat aangeeft dat het om een kleur, foto, afmeting of maat gaat.

Want wat nu als er een 2e foto bij komt. Of een review, of een beschrijving. Die kunnen allemaal als "entiteit" opgeslagen worden. Maar dan gaat "is numeriek" ook niet meer helpen.
Ik moet het doen met de opgegeven tabellen.
Je krijgt dan zo'n oplossing. Mooi is anders, maar er is beeld.
 <?php
$db = new mysqli ('localhost', 'user', 'password', 'database' );

$query = "SELECT * FROM tabel1 t1
JOIN tabel2 t2
ON t1.id = t2.postid
WHERE t2.value REGEXP '^[^0-9]+$';";

$result = $db->query( $query );

while ( $row = $result->fetch_object() )
{
	echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
	$product = $row;
}

echo '<pre>' . print_r( $product, TRUE ) . '</pre>';

$query = "SELECT * FROM tabel1 t1
JOIN tabel2 t2
ON t1.id = t2.value
WHERE t2.value REGEXP '^[0-9]+$';";

$result = $db->query( $query );

while ( $row = $result->fetch_object() )
{
	echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
	$product->afbeelding = $row->naam;
}

echo '<pre>' . print_r( $product, TRUE ) . '</pre>';

echo '<table border="1">';

$keys = array_keys( (array)$product );

echo '<tr>';

for ( $i = 0; $i < count($keys); $i++ )
{
	echo '<th>' . $keys[$i] . '</th>';
}

echo '</tr>' . PHP_EOL . '<tr>';

foreach (  $product as $key => $value )
{
	echo '<td>' . $value . '</td>';
}

echo '</tr>';

echo '</table>';

?>

SELECT t1.naam, t2.value AS kleur, t1F.naam AS foto
FROM tabel1 t1
JOIN tabel2 t2 on t2.postid = t1.id AND NOT t2.value REGEXP '^[^0-9]+$'
JOIN tabel2 t2F on t2F.postid = t1.id AND t2F.value REGEXP '^[^0-9]+$'
JOIN tabel1 t1F on t1F.id = t2F.value

WHERE tabel1.id = 250


Dit zou records moeten geven met alle kleuren en foto's (bij 1 foto en 1 kleur maar 1 record)
>> is inderdaad een heel rare benadering.

Blij dat iemand het met me eens is ;)

De huidige set-up is vragen om problemen.

Zoiets als dit lijkt me handiger:

tabel 1: products
[table]
[tr][td]id[/td][td]name[/td][/tr]
[tr][td]250[/td][td]Skateboard[/td][/tr]
[tr][td]251[/td][td]Fiets[/td][/tr]
[/table]

table 2: product_properties
[table]
[tr][td]id[/td][td]product_id[/td][td]type[/td][td]value[/td][/tr]
[tr][td]203[/td][td]250[/td][td]color[/td][td]rood[/td][/tr]
[tr][td]204[/td][td]250[/td][td]image[/td][td]skateboard-100x100.png[/td][/tr]
[tr][td]205[/td][td]251[/td][td]gender[/td][td]heren[/td][/tr]
[/table]

Reageren