Suche

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