Suche
am 27.03.2007 19:50:20 von m.raupe
Hallo,
Habe folgende Abfrage für eine Suche (hier vereinfacht):
Es handelt sich um Reisen....
Jede Reise hat eine Kategorie, aber nicht jede ein Reiseziel.
SELECT d1.*,d2.name as kategorie__txt, d3.name as reiseziel__txt FROM reisen
d1,kategorien d2, reiseziele d3 WHERE (d1.text LIKE '%suchbegriff%') AND
((d2.id=d1.kategorie) AND (d3.id=d1.reiseziel OR d1.reiseziel is NULL))
GROUP BY d1.id ORDER BY titel
Das Problem ist, dass jetzt alle Reisen, die keine Reiseziel besitzen gar
nicht angezeigt werden...
(weil reiseziele.id nicht gleich reisen.reiseziel ist)
Aus diesem Grund habe ich es mit "OR d1.reiseziel is NULL" versucht.
Das bringt aber auch nichts....
Hat jemand eine Idee?
LG, Michi
Falls es hilft: Die Komplette Abfrage lautet:
SELECT d1.*,d2.id as kateg__id,d2.name as kategorie__txt, d3.name as
reiseziel__txt FROM reisen d1,kategorien d2,reiseziele d3 WHERE (((d1.titel
LIKE '%suchbegriff%') OR (d2.name LIKE '%suchbegriff%') OR (d3.name LIKE
'%suchbegriff%') OR (d1.startdatum LIKE '%suchbegriff%') OR (d1.enddatum
LIKE '%suchbegriff%') OR (d1.preis LIKE '%suchbegriff%') OR (d1.ezzuschlag
LIKE '%suchbegriff%') OR (d1.leistungen LIKE '%suchbegriff%') OR
(d1.reiseverlauf LIKE '%suchbegriff%') OR (d1.bild LIKE '%suchbegriff%')))
AND ((d2.id=d1.kategorie) AND (d3.id=d1.reiseziel OR d1.reiseziel is NULL))
GROUP BY d1.id ORDER BY titel
Re: Suche
am 27.03.2007 20:11:37 von thborsdorf
michael ra. schrieb am 27.03.2007 19:50:
> Jede Reise hat eine Kategorie, aber nicht jede ein Reiseziel.
> Das Problem ist, dass jetzt alle Reisen, die keine Reiseziel besitzen
> gar nicht angezeigt werden...
> Hat jemand eine Idee?
Du bist nicht wirklich ein Freund von LEFT OUTER JOIN, oder?
> LG, Michi
MfG Thomas.
Re: Suche
am 27.03.2007 20:29:36 von m.raupe
Kannst du mir das mit LEFT OUTER JOIN kurz erklären?
"Borsdorf, Thomas" schrieb im Newsbeitrag
news:eubmoo$4gb$00$1@news.t-online.com...
> michael ra. schrieb am 27.03.2007 19:50:
>> Jede Reise hat eine Kategorie, aber nicht jede ein Reiseziel.
>
>> Das Problem ist, dass jetzt alle Reisen, die keine Reiseziel besitzen gar
>> nicht angezeigt werden...
>
>> Hat jemand eine Idee?
>
> Du bist nicht wirklich ein Freund von LEFT OUTER JOIN, oder?
>
>> LG, Michi
>
> MfG Thomas.
Re: Suche
am 27.03.2007 20:35:36 von Philipp Taprogge
Hi!
Thus spake michael ra. on 03/27/2007 08:29 PM:
> Kannst du mir das mit LEFT OUTER JOIN kurz erklären?
Wikipedia kann...
http://en.wikipedia.org/wiki/Join_(SQL)
Bis denne,
Phil
Re: Suche
am 27.03.2007 21:49:03 von m.raupe
> Du bist nicht wirklich ein Freund von LEFT OUTER JOIN, oder?
Danke für den Tipp, aber das Problem ist das gleiche...
Abfrage:
SELECT d1.*,d2.id as kateg__id,d2.name as kategorie__txt, d3.name as
reiseziel__txt FROM (reisen AS d1 LEFT OUTER JOIN kategorien AS d2 ON
d1.kategorie=d2.id) LEFT OUTER JOIN reiseziele AS d3 ON d1.reiseziel=d3.id
WHERE (((d1.titel LIKE '%suchbegriff%') OR (d2.name LIKE '%suchbegriff%') OR
(d3.name LIKE '%suchbegriff%') OR (d1.startdatum LIKE '%suchbegriff%') OR
(d1.enddatum LIKE '%suchbegriff%') OR (d1.preis LIKE '%suchbegriff%') OR
(d1.ezzuschlag LIKE '%suchbegriff%') OR (d1.leistungen LIKE '%suchbegriff%')
OR (d1.reiseverlauf LIKE '%suchbegriff%') OR (d1.bild LIKE
'%suchbegriff%'))) AND 1=1 ORDER BY titel
Re: Suche
am 29.03.2007 19:09:34 von thborsdorf
Hallo Michael!
michael ra. schrieb am 27.03.2007 21:49:
> Danke für den Tipp, aber das Problem ist das gleiche...
>
> Abfrage:
> SELECT d1.*,d2.id as kateg__id,d2.name as kategorie__txt, d3.name as
[...]
Tu dir selbst einen Gefallen und mach mal ein bisschen Struktur in dein
SQL-Statement, z.B. durch Zeilenumbrüche!
Ich würde folgendes versuchen:
1: Entferne die beiden überflüssigen Klammern in der WHERE-Bedingung
2: Entferne die Klammer hinter "FROM"! Ich weiß zwar nicht ob das was
ausmacht aber eine Klammerung an dieser Stelle auf diese Weise hab
ich noch nie gesehen.
3: Entferne "AND 1=1"! Sieht doof aus und bringt eh nix!
An sonsten sieht dein SQL-Statement so aus wie ich es vermutlich auch
aufbauen würde.
MfG Thomas.
Re: Suche
am 29.03.2007 22:28:35 von Siegfried Schmidt
Hallo Thomas,
> 2: Entferne die Klammer hinter "FROM"! Ich weiß zwar nicht ob das was
> ausmacht aber eine Klammerung an dieser Stelle auf diese Weise hab
> ich noch nie gesehen.
Manche SQL-Dialekte (z.B. Access) können mehrfache Joins auf gleicher Ebene
nicht auswerten, sie werden dort grundsätzlich mit eine Klammerebene pro
Beziehung geschrieben.
Siegfried
--
http://www.schmidt.ath.cx
Re: Suche
am 29.03.2007 22:57:14 von thborsdorf
Siegfried Schmidt schrieb am 29.03.2007 22:28:
> Manche SQL-Dialekte (z.B. Access) können mehrfache Joins auf gleicher Ebene
> nicht auswerten, sie werden dort grundsätzlich mit eine Klammerebene pro
> Beziehung geschrieben.
Man lernt halt nie aus :-)
Access war mir schon immer ein wenig suspekt, insbesondere nachdem ich
mal ein Projekt in Access97 realisieren musste...
> Siegfried
MfG Thomas.
Re: Suche
am 30.03.2007 00:37:23 von Siegfried Schmidt
Hallo Thomas,
> Access war mir schon immer ein wenig suspekt, insbesondere nachdem ich
> mal ein Projekt in Access97 realisieren musste...
Immerhin kennt es ab Jet4 schon check contraints.. ;-)
Siegfried
--
http://www.schmidt.ath.cx