Ik heb een probleem bij het terugkrijgen van de juiste data.
Schema:
rent_item
title
description
etc..
rent_item_option
option_type_id (bv. kmstand of provincie)
option_id (bv. groningen)
rent_item_id
value (bv. de waarde van de kmstand: 150000)
Nu bouw ik de query op in doctrine en kom ik op de volgende code (echte code genereerd onderstaande DQL query):
dit resulteert in de volgende mysql query:
Deze geeft altijd 0 resultaten. Heeft te maken met de between die ook afhankelijk is van de option_type_id. Gebruik ik echter een OR voor de 'betweens' dan werkt het wel maar zijn de resultaten verkeerd.
Ik kan het oplossen in php zelf maar wil het liefst alles in 1 query, hoe bouw ik deze nou goed op?
Schema:
rent_item
title
description
etc..
rent_item_option
option_type_id (bv. kmstand of provincie)
option_id (bv. groningen)
rent_item_id
value (bv. de waarde van de kmstand: 150000)
Nu bouw ik de query op in doctrine en kom ik op de volgende code (echte code genereerd onderstaande DQL query):
PHP:
1
2
3
4
5
6
7
8
9
| $q = Doctrine_Query::create() ->select('r.*, ro.*') ->from('RentItem r') ->leftJoin('r.RentItemOption ro') ->where('ro.option_id IN (15,16,18)') ->andWhere('ro.option_id = 9') ->andWhere('(ro.option_type_id = 1 AND ro.value BETWEEN 0 AND 200000)') ->andWhere('(ro.option_type_id = 2 AND ro.value BETWEEN 2001 AND 2010)') ->groupBy('r.id'); |
dit resulteert in de volgende mysql query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| SELECT m.id AS m__id, m.user_id AS m__user_id, m.type AS m__type, m.title AS m__title, m.description AS m__description, m.defaultprice AS m__defaultprice, m.phonenumber AS m__phonenumber, m.faxnumber AS m__faxnumber, m.mobilenumber AS m__mobilenumber, m.website AS m__website, m.longitude AS m__longitude, m.latitude AS m__latitude, m.created_at AS m__created_at, m.updated_at AS m__updated_at, m.slug AS m__slug, m2.id AS m2__id, m2.option_type_id AS m2__option_type_id, m2.option_id AS m2__option_id, m2.rent_item_id AS m2__rent_item_id, m2.value AS m2__value FROM mo_rent_item m LEFT JOIN mo_rent_item_option m2 ON m.id = m2.rent_item_id WHERE ( m2.option_id = 9 AND m2.option_id IN ( 15, 16, 19 ) AND ( m2.option_type_id =1 AND m2.value BETWEEN 0 AND 200000 ) AND ( m2.option_type_id =2 AND m2.value BETWEEN 2001 AND 2010 ) ) GROUP BY m.id |
Deze geeft altijd 0 resultaten. Heeft te maken met de between die ook afhankelijk is van de option_type_id. Gebruik ik echter een OR voor de 'betweens' dan werkt het wel maar zijn de resultaten verkeerd.
Ik kan het oplossen in php zelf maar wil het liefst alles in 1 query, hoe bouw ik deze nou goed op?