Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] Pomoc przy kopnstruowaniu zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
propage
mam tabele

products
------------------
pdoruct_id

i

days_2_products
_____________
day_2_product_id
day_2_product_product_id
day_2_product_day


do tabeli days_2_products dodaje dni, w których produkt nie jest dostępny

potem wyszukuje, ktoś wpisuje date od i date do
jesli produkt jest dostepny w dacie od do wtedy ma mi zwrocic ten rekord, wiec rozbijam sobie date od do na wszystkie dni ktore objmuje

i konstruje zapytanie
  1. <?php
  2. SELECT * FROM products p left join producent pro on (p.product_producent_id = pro.producent_id) left join days_2_products d_2_p on (d_2_p.day_2_product_product_id = p.product_id) WHERE d_2_p.day_2_product_day <> '2008-08-25' AND d_2_p.day_2_product_day <> '2008-08-26' itd.... GROUP by d_2_p.day_2_product_product_id
  3. ?>


Zastanwaiem się czy " d_2_p.day_2_product_day <> '2008-08-25' AND d_2_p.day_2_product_day <> '2008-08-26' itd....
" można jakość uprościć ?

probowalem tak

"NOT d_2_p in ( '2008-08-25', ' '2008-08-25' itd. ... )" jednak to nie zadziala dobrze, wyrzuci z wyniku tylko ta jedna wartosc przed grupowaniem. Może ktoś ma jakiś pomysł ?

dotkowo zauwzylem że mimo left join jesli w tabeli z dniami nie ma zdanych danych zwiazanych z danym produktem to ten produkt nie bedzie wyświtlany AND d_2_p.day_2_product_day <> '2008-08-26'
oscar17
widzę że to co próbowałeś to trochę inaczej wygląda - coś takiego nie chodzi:
  1. WHERE d_2_p.day_2_product_day NOT IN('2008-08-25','2008-08-26')

A to że produkt nie jest wyświetlany gdy nie ma jego id w d_2_p to nic dziwnego, bo po tych id grupuje.
Spróbuj dać
  1. GROUP BY p.product_id
propage
HERE d_2_p.day_2_product_day NOT IN('2008-08-25','2008-08-26')

tak też próbowałem to nie ma różnicy, GROUP by p.product_id nic nie zmieni, wogole usuwając group by będzie to samo, to znaczy produkty o które mi chodzi nie będą się wyswietlac



wpadłem na pomysł jak to w inny sposob zrobić, ale to strasznie bedzie obciazać bazę danych

  1. <?php
  2. SELECT *
  3. FROM products p
  4. LEFT JOIN producent pro ON ( p.product_producent_id = pro.producent_id )
  5. WHERE 
  6.  '2008-04-25' not in (SELECT day_2_product_day FROM days_2_products WHERE day_2_product_product_id = p.product_id) AND
  7.  '2008-04-27' not in (SELECT day_2_product_day FROM days_2_products WHERE day_2_product_product_id = p.product_id) itd
  8. ?>


jest może jakiś operator zawierania się zbioru w zbiorze ?

tak aby to połaczyć w całość - ('2008-04-25' , '2008-04-27' ) kazdy element z tego zbioru nie może sie zawierac w zbiorze (SELECT day_2_product_day FROM days_2_products WHERE day_2_product_product_id = p.product_id)
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.