Archiv verlassen und diese Seite im Standarddesign anzeigen : mehere Referenzierungen auf eine andere Tabelle in einer Spalte
benfolds
01.06.2008, 15:17:59
Hallo!
ich hab folgendes problem, vielleicht hat da einer eine lösung zu:
es gibt zwei Tabellen:
produkte => id, name
referenzen => name, referenzen_zu_produkte.id
nun möchte ich in dem feld referenzen_zu_produkte.id mehrere id's von produkten eintragen und diese dann auch abfragen können, sprich
SELECT name
FROM referenzen
WHERE referenzen_zu_produkte.id =
(SELECT id
FROM produkte
WHERE produkte.name = "ein spezielles produkt")
natürlich könnte ich das über PHP lösen und z.B. immer alle Referenzen laden und per php trennen. muss doch aber nicht sein, oder?
Indyk
01.06.2008, 22:44:43
Wirst du aber so machen müssen, oder du machst eine spalte pro referenz.
benfolds
03.06.2008, 12:12:33
hmm, ok..
könnte man nicht vielleicht das Feld selbst mit einer SQL abfrage füllen, etwa:
1 OR 5 OR 35
???? nur so ne idee...
Wenn ich das richtig verstanden habe, sollen viele produkte viele id's haben können.
Wenn das so ist (n/n Relation), brauchst du eine dritte tabelle, von der aus du deinen select startest und dann die realen tabellen dranjoinst
Also Tabelle product_id mit spalte id und product
Das ergibt Tabellen: product -> product_id <- id
So in etwa könnte das dann aussehen
SELECT product.name, id.id
FROM product_id
LEFT JOIN product
ON (product.id = product_id.product_id)
LEFT JOIN id
ON (id.id = product_id.id_id)
WHERE product_id.id_id = $id ...
GROUP BY ...
ORDER BY ...
benfolds
05.06.2008, 16:18:50
hallo stb!
da komme ich nicht ganz mit.. es gibt also 3 tabellen
produkte (id, titel)
referenzen (id, titel)
join_tab (ref_id, prod_id)
nun gibts für jeden querverweis einen eintrag in "join_tab".
SELECT produkte.id, referenzen.id
FROM join_tab
LEFT JOIN produkte
ON (produkte.id = join_tab.prod_id)
LEFT JOIN referenzen
ON (referenzen.id = join_tab.ref_id)
WHERE prod_id = 1;
Dann werden alle Referenzen selektiert, die dem Produkt 1 zugewiesen sind?
Müsste es nicht heissen
LEFT JOIN produkte
WHERE produkte.id = join.prod_id
?
benfolds
05.06.2008, 16:40:39
WAHNSINN!!! :)
$test = $query -> ReturnQuery("
SELECT referenzen.id, referenzen.titel
FROM prod_ref_join
LEFT JOIN referenzen
ON (referenzen.id = prod_ref_join.ref_id)
WHERE prod_id = 1
");
ergebnis:
(
[0] => Array
(
[id] => 12
[titel] => hochkant
)
[1] => Array
(
[id] => 6
[titel] => Noch ne Referenz
)
)
stimmt genau!
Danke stb! :)
Das mit den Joins kann man noch fortsetzten
Mal so als Beispiel:
SELECT truck_article.id as ta_id,
truck_article.truck_id as ta_truck_id,
truck_article.article_id as ta_article_id,
truck_article.is_special as ta_is_special,
truck_article.price as ta_price,
truck_article.count as ta_count,
truck_article.weight as ta_weight,
truck_article.volume as ta_volume,
truck_article.weight_unit_id as ta_weight_unit_id,
truck_article.volume_unit_id as ta_volume_unit_id,
truck_article.display as ta_display,
truck_article.fake_name as ta_fake_name,
article.name as a_name,
article.price_new as a_price,
article.weight as a_weight,
article.volume as a_volume,
project_article_special.name as sa_name,
project_article_special.count as sa_count,
project_article_special.price as sa_price,
project_article_special.weight as sa_weight,
project_article_special.volume as sa_volume,
booking_extra.count_sum as a_count,
truck.name as t_name,
truck_article_name.name as ta_name,
article_section.name as s_name,
article_section.id as s_id,
article_group.name as g_name,
article_group.id as g_id,
unit_weight.name as unit_weight,
unit_volume.name as unit_volume
FROM truck_article
LEFT JOIN article
ON (truck_article.article_id = article.id)
LEFT JOIN project_article_special
ON (truck_article.article_id = project_article_special.id)
LEFT JOIN booking_extra
ON (booking_extra.article_id = article.id
AND booking_extra.project_id = 6)
LEFT JOIN truck
ON (truck_article.truck_id = truck.id)
LEFT JOIN truck_article_name
ON (truck_article_name.article_id = truck_article.article_id
AND truck_article_name.truck_lang_id = truck.truck_lang_id)
LEFT JOIN article_group
ON (article.article_group_id = article_group.id)
LEFT JOIN article_section
ON (article_group.article_section_id = article_section.id)
LEFT JOIN unit as unit_weight
ON (unit_weight.id = truck_article.weight_unit_id)
Left JOIN unit as unit_volume
ON (unit_volume.id = truck_article.volume_unit_id)
WHERE (truck_article.project_id = 6
AND truck.id = 1
AND truck_article.is_special = 1 AND truck_article.article_id > 0
)
ORDER BY truck.id, article_section.id, article_group.id;
Aber es geht natürlich noch krasser...
vBulletin® v3.8.3, Copyright ©2000-2024, Jelsoft Enterprises Ltd.