Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] LIKE i AND
Forum PHP.pl > Forum > Bazy danych > MySQL
parzol
Witam,

Mam tabelę 'property' (id, name, cos, cos2) oraz 'attraction' (id, name). Łączy je tabela 'property_attraction' (property_id, attraction_id). Potrzebuję zbudować zapytanie SQL`a, które pobiera pewne dane z tabeli 'property' z klauzulą WHERE w której podane są id atrakcji.

Gdy dam WHERE pa.attraction_id=1 OR pa.attraction_id=2 to pokazuje mi property (co logiczne) z conajmniej jedną z tych dwóch atrakcji. Gdy zamiast OR dam AND dostaję "EMPTY SET".

Jak zbudować więc to zapytanie aby otrzymać te property które mają atrakcje o id 1 i 2 ? sciana.gif
jarrod
Ja bym to zrobił tak:
  1. SELECT property.* FROM `property` JOIN `property_attraction` ON `property_attraction`.`attraction_id` = `property`.`id`
  2. WHERE `property_attraction`.`attraction_id` = [id atrakcji 1] OR `property_attraction`.`attraction_id` = [id atrakcji 2]

Ale łatwiej by było jakbyś wkleił swoje zapytanie.
skowron-line
Cytat
Gdy dam WHERE pa.attraction_id=1 OR pa.attraction_id=2 to pokazuje mi property (co logiczne) z conajmniej jedną z tych dwóch atrakcji. Gdy zamiast OR dam AND dostaję "EMPTY SET".

Kod
pa.attraction_id=1
pa.attraction_id=2


To są takie same pola więc nie dziw się że kllauzula AND nie działa. Bo jak jedno pole może przyjąć na raz 2 wartości

Możesz użyć IN
Kod
WHERE pa.attraction.id IN ( 1, 2 )
nevt
To będzie coś w rodzaju:
  1. SELECT `property`.* FROM `property` LEFT JOIN `property_attraction` ON `property`.`id` = `property_attraction`.`property_id` WHERE `attraction_id` IN (value_1, value_2) GROUP BY `property`.`id` HAVING COUNT(`attraction_id`) = 2;


Powodzenia.
parzol
Cytat(nevt @ 28.08.2008, 08:11:56 ) *
To będzie coś w rodzaju:
  1. SELECT `property`.* FROM `property` LEFT JOIN `property_attraction` ON `property`.`id` = `property_attraction`.`property_id` WHERE `attraction_id` IN (value_1, value_2) GROUP BY `property`.`id` HAVING COUNT(`attraction_id`) = 2;


Samo w sobie to działa. Ale po dołączeniu do mojego zapytania SQL dalej wyrzuca Empty Set.

O to moje zapytanie:

  1. SELECT r.id AS room_id, r.name AS room_name, p.id AS property_id, p.name AS property_name, c.name AS city, region.name AS region, p.standard, rg.file, MIN(rp.price) AS min_price, MAX(rp.price) AS max_price,
  2. GROUP_CONCAT(DISTINCT CONCAT(a.name, '*', a.icon) ORDER BY a.name SEPARATOR '|') AS attractions, r.description AS opis, r.bedroom_number AS l_sypialni, r.room_number AS l_pokoi, GROUP_CONCAT(DISTINCT CONCAT(t.name) ORDER BY t.name SEPARATOR '|') AS typ, r.is_apartment AS apartament
  3. FROM room r LEFT JOIN property p ON r.property_id=p.id
  4. LEFT JOIN room_gallery rg ON rg.room_id=r.id
  5. LEFT JOIN room_price rp ON rp.room_id=r.id
  6. LEFT JOIN region ON p.region_id=region.id
  7. LEFT JOIN city c ON p.city_id=c.id
  8. LEFT JOIN property_attraction pa ON p.id=pa.property_id
  9. LEFT OUTER JOIN attraction a ON pa.attraction_id=a.id AND (a.is_active=1 OR a.is_active IS NULL)
  10. LEFT JOIN property_category pc ON p.id=pc.property_id
  11. LEFT JOIN room_type rt ON rt.room_id=r.id
  12. LEFT OUTER JOIN type t ON rt.type_id=t.id AND (t.is_active=1 OR t.is_active IS NULL)
  13. WHERE pa.attraction_id IN(3,9) GROUP BY r.id HAVING COUNT(pa.attraction_id)=2 ORDER BY p.is_promoted DESC LIMIT 0, 51;


Jakiś pomysł? Wskazówka?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.