Thread Subselect - wie bekomme ich ein TRUE, wenn KEINE Einträge vorhanden sind? (6 answers)
Opened by olruebe01 at 2009-02-25 14:36

olruebe01
 2009-02-25 21:49
#119154 #119154
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Kennt Ihr das, wenn Ihr nach Tagen den Wald vor lauter Bäumen nicht mehr seht und auch nicht mehr wisst, was Ihr nun schon alles ausprobiert habt und wie dabei das Ergebnis war?
Bei mir ist es gerade mal wieder soweit und ich gebe für den Moment auf, denn sonst lande ich noch in der Klappse...

Könnt Ihr mir helfen?
Das Ziel: Ich habe in meiner Tabelle user_settings angegeben, auf wieviele Artikel einer gleichen Kategorie ich maximal gleichzeitg höchstbietender sein will. Es gibt mehere Angaben für unterschiedliche Kategorien, z.B. 5 Autradios, 3 Modellflugzeuge, etc. und auch für unterschiedliche User

Nun soll aus der Tabelle items ein Artikel aus einer Kategorie ausgegeben werden, auf den ich noch nicht geboten habe und wo die Anzahl an höchstgeboten auf andere Artikel aus der gleichen Katerorie kleiner ist als in meinen user_settings angegeben. Ein paar andere Bedingungen gibt es auch noch aber die machen keine Probleme und erklären sich aus dem Statement selber denke ich.
Hier mein Statement

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
		
SELECT
items.title,
items.subtitle,
items.ebay_id AS item_id,
items.actual_price AS actual_price,
items.max_bid,
items.image_url,
user_settings.category,
user_settings.minbid,
user_settings.maxbid,
user_settings.item_condition,
user_settings.max_items_to_buy
FROM `users`
LEFT JOIN user_settings ON ( users.ID = user_settings.user_id)
LEFT JOIN items ON ( items.primary_category = user_settings.category)
LEFT JOIN placed_bids ON (placed_bids.user_id = users.ID AND user_settings.category = placed_bids.category AND placed_bids.ebay_id = items.ebay_id)


WHERE
users.ebay_name ='".$GET_ARRAY["user_id"]."'

AND
(
user_settings.minbid >= items.actual_price
OR user_settings.minbid < 1
)

AND
(
user_settings.maxbid <= items.actual_price
OR user_settings.maxbid <1
)
AND
user_settings.category = items.primary_category


AND
items.item_closed=0

AND
items.actual_price < items.max_bid

AND
item_ends + INTERVAL 1 HOUR > NOW( )


having (SELECT count(*) from placed_bids WHERE
user_id = users.ID AND high_bid =1
and category = items.primary_category group by category) < user_settings.max_items_to_buy


ORDER BY RAND()
LIMIT 1


Das ist eine von gefühlt hunderten Variationen, die ich probiert habe.

Ich lande immer wieder bei den selben Problemen:
1: dass keine Kategorien berücksichtigt werden, wenn noch GAR KEINE Gebote in einer Kategorie vorliegen (also in der Tabelle placed_bids) - Dieses Problem konnte ich mit IFNULL beheben. Dann trat aber wieder Problem 2 auf.
2: Dass gar kein Ausgegeben wird, wenn eine(!) Kategorie Ihre maximal Höchstzahl an Geboten hat.

Bei der oben gezeigten Abfrage ist das Problem folgendes:
Ich gebe in user_settings an, dass ich in Kategorie A auf 5 Artikel möchten möchte und in Kategorie B auf 2.
Das klappt erstmal. Ich bekomme solange beide Kategorien ausgegeben, bis B 2 Höchstgebote hat. Ab dahin nur noch aus Kat A. SO soll es sein.
Aber andere Situation: Ich habe meien Anzahl in Kat B noch ncit erreicht, in A aber schon, dann bekomme ich GAR KEINE Ausgabe mehr. Auch nicht Kat B, was aber das Ziel wäre.
Offensichtlich ist es so, dass bei erreichen des größeren eingestellten Wertes gleich ALLES geblockt wird. Wird jedoch zuerst die kleinere Anzahl höchstgebote erreicht, wird ganz korrekt nur die betroffene Kategorie für die Ausgabe geblockt.

Kann mir jemand mal bitte tatkräftig unter die Arme greifen?

View full thread Subselect - wie bekomme ich ein TRUE, wenn KEINE Einträge vorhanden sind?