PDA

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

stb
05.06.2008, 10:37:33
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! :)

stb
06.06.2008, 11:02:29
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...