Autor |
Nachricht |
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 31.05.2007 09:34
Titel Zuordnungsproblem |
|
|
Hallo Forengemeinde,
ich habe ein Problem welches mich nun schon seid 2 Tagen quält.
Es geht um folgendes, ich habe 3 Tabellen in einer DB.
Erste Tabelle enthält Produkte mit eindeutiger ID, Zweite Tabelle enthält Produkteigenschaften mit eindeiútiger ID und die 3 Tabelle ist eine Zuordnungstabelle von Produkte und Produkteigenschaften. Der Aufbau der Zuordnungstabelle sieht wie folgt aus:
IDPr | IDEig
1 | 1
1 | 4
1 | 8
1 | 11
1 | 16
1 | 17
1 | 22
1 | 26
2 | 4
2 | 16
2 | 17
2 | 22
auf der website gibt es Kontrollkästchen, über die man eine Auswahl von Produkteigenschaften treffen kann. Nach abschicken des Formulares soll über eine Programmierung das Produkt (oder die Produkte) gewählt werden auf das die Produkteigenschaften zutreffen.
Nun dachte ich das über die eindeutige Zuordnung in der Zuordnungstabelle das ergebniss über eine Abfrage ausgegen werden kann.
Folgendes habe ich:
Code: |
...
dim erg
SQL = " SELECT DISTINCT [finder-zuordnung].IDPr, [finder-produkte].* FROM [finder-zuordnung] INNER JOIN [finder-produkte] ON [finder-zuordnung].IDPr = [finder-produkte].IDPr WHERE [finder-zuordnung].IDPr = [finder-produkte].IDPr AND ("
dim blnSetOR
blnSetOR = false
For Each erg In request.form
If erg <> "senden" then
if blnSetOR = true then
SQL = SQL & " OR"
end if
blnSetOR = true
SQL = SQL & " [finder-zuordnung].IDEig = " & erg
End If
next
SQL = SQL & ")"
...
|
...
nur funuktioniert die Abfrage mit "OR" nicht richtig, da er mir auch Produkte anzeigt auf die bei 2 gewählten Produkteigenschaften auch die anzeigt bei den nur eine Eigenschaft zugeordnet ist.
Wenn ich die Abfrage mit "AND" abändere bekomme ich keine ausgabe mehr,
da in einer Zeile ja immer nur eine Produkteigenschaft eingetragen ist. [siehe oben]
Kann mir jemand einen Tipp geben wie ich nur die Produkte angezeigt bekomme bei denen auch die Produkteigenschaften zugeordnet sind die über das Formular übergeben werden?
Dank euch,
gruß kash
Zuletzt bearbeitet von Kash am Do 31.05.2007 09:35, insgesamt 1-mal bearbeitet
|
|
|
|
|
der_niegel
Dabei seit: 07.07.2005
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 31.05.2007 11:31
Titel
|
|
|
Sieht aus wie ASP und Access?!
Versuch mal in der Art:
Code: | sql = "SELECT DISTINCT p.*
FROM [finder-produkte] p
LEFT JOIN [finder-zuordnung] z
ON p.id = z.IDPr
WHERE z.IDEig IN (" & Request.Form("IDEig") & ")" |
Voraussetzung ist hier, dass die Checkboxen durch Ihren Namen gruppiert wurden, d.h., sie alle das Attribut name="IDEig" haben. Das sollte eine kommaseparierte Liste ergeben. Testen konnte ich das leider nicht...
Zuletzt bearbeitet von der_niegel am Do 31.05.2007 11:34, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 31.05.2007 11:45
Titel
|
|
|
hallo der_niegel,
danke für die antwort.
was meinst du mit der namensbezeichnung der checkboxes?
Momentan haben Sie als Bezeichnung die jeweilige ID die in der Datenbank vergeben wurde.
|
|
|
|
|
der_niegel
Dabei seit: 07.07.2005
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 31.05.2007 12:15
Titel
|
|
|
Eine Liste von Checkboxen erzeugen in der Art:
Code: | sql = "SELECT id, bezeichnung FROM [finder-eigenschaften]"
rs.Open sql, connection
While Not rs.EOF
Response.Write "<label><input type=""checkbox"" name=""IDEig"" value=""" & rs.Fields("id") & """ /> " & Server.HTMLEncode(rs.Fields("bezeichnung")) & "</label>"
rs.MoveNext()
Wend |
Damit haben alle Checkboxen den selben Namen und werden automatisch als kommaseparierte Liste / Array übergeben. Wenn nun bsplw. die erste und dritte Checkbox angehakt sind und deren values "1" und "3" sind, ergibt Request.Form("IDEig") einen Wert von "1, 3". Das ist dann gleich idealerweise in das andere sql-Statement zu übernehmen, wenn ich nicht irre.
Zuletzt bearbeitet von der_niegel am Do 31.05.2007 12:20, insgesamt 2-mal bearbeitet
|
|
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 31.05.2007 13:26
Titel
|
|
|
hallo der_niegel,
also das klappt.
bekomme ein kommasepariertes Ergebniss.
wenn das als String behandelt werden würde, könnte ich ja den inhalt der spalte dementsprechend aufbauen.
|
|
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 31.05.2007 13:33
Titel
|
|
|
der_niegel hat geschrieben: | Sieht aus wie ASP und Access?!
Versuch mal in der Art:
Code: | sql = "SELECT DISTINCT p.*
FROM [finder-produkte] p
LEFT JOIN [finder-zuordnung] z
ON p.id = z.IDPr
WHERE z.IDEig IN (" & Request.Form("IDEig") & ")" |
... |
ähm kann es sein das dein Statement kleine Fehler enthält?
bsp:
**FROM [finder-produkte] p
sollte doch so geschrieben werden
**FROM [finder-zuordnung] AS p
|
|
|
|
|
Skyw4lker
Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht:
|
Verfasst Do 31.05.2007 13:43
Titel
|
|
|
Kommt auf die DB an, manche wollen ein AS manche nicht.
|
|
|
|
|
Kash
Threadersteller
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 31.05.2007 13:49
Titel
|
|
|
also leider bekomme ich mit dem statement zu dem selben ergbniss wie mit meinem statement.
es ist einfach zum verrückt werden....
*** tja funktioniert doch nicht so wie ich wollte.war ein wenig zu voreilig.
Zuletzt bearbeitet von Kash am Do 31.05.2007 14:31, insgesamt 2-mal bearbeitet
|
|
|
|
|
|
|
|