Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dodanie warunku w WHERE
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam listę zamówień ograniczoną poprzez poniższy warunek:

  1. WHERE `ID_dzialu_realizujacego` = (SELECT ID_dzial FROM uzytkownicy_loginy WHERE loginy = SUBSTRING_INDEX ( USER(), '@', 1))


czyli do każdego użytkownika przypisany jest dział, a w zasadzie ID tego działu i wyświetlają mu się tylko jego zamówienia. Chciałbym teraz dodać paru użytkowników bez przypisanych działów i zrobić tak, aby im się wyświetlały wszystkie zamówienia. Tylko za bardzo nie wiem jak się do tego zabrać. chyba musiałbym tabelę z powyższego podzapytania przenieś do klauzuli FROM głównego zapytania, ale nie jestem pewien. Może jest prostszy sposób na to?

trueblue
LEFT JOIN z tabelą uzytkownicy_loginy, sprzęgnięcie na: ID_dzialu_realizujacego=ID_dzial + warunku z WHERE.
mihmih
nie mogę sobie z tym poradzić, może jak ktoś rzuci okiem na całe zapytanie to znajdzie błąd...gdy użytkownik ma wybrany dział to pokazuje ostatnie 15 zamówień, a gdy nie ma to nie pokazuje żadnego. A chciałbym żeby wtedy pokazywało również ostatnie 15 zamówień niezależnie od działu.


  1. SELECT `zamowienia`.`ID_zamowienia`, `zamowienia`.`numer_zamowienia`, `zamowienia`.`ID_zamawiajacego`, `zamawiajacy`.`nazwa_firmy`, `zamowienia`.`kto_zrobil`, NOW(), DATE_FORMAT(`zamowienia`.`data_dodania`,'%d.%m.%Y, %H:%i') AS `data_dodania`, `zamowienia`.`ID_dzialu_realizujacego`,
  2.  
  3. SUM( ( `widok_aktualne_ceny2`.`aktualna_cena` - ( `widok_aktualne_ceny2`.`aktualna_cena` * `pozycje_zamowieniowe`.`rabat` / 100 ) ) * `pozycje_zamowieniowe`.`ilosc` ) AS `wartoscporabacie`, `waluty`.`skrot`
  4.  
  5. FROM (`baza`.`zamowienia` AS `zamowienia` LEFT OUTER JOIN baza.uzytkownicy_loginy AS uzytkownicy_loginy ON `zamowienia`.`ID_dzialu_realizujacego` = `uzytkownicy_loginy`.`ID_dzial` ) LEFT OUTER JOIN `baza`.`pozycje_zamowieniowe` AS `pozycje_zamowieniowe` ON `pozycje_zamowieniowe`.`ID_zamowienia` = `zamowienia`.`ID_zamowienia` LEFT OUTER JOIN `widok_aktualne_ceny2` ON `pozycje_zamowieniowe`.`ID_pozycji_zamowieniowej` = `widok_aktualne_ceny2`.`ID_poz` LEFT OUTER JOIN `baza`.`wyroby4` AS `wyroby4` ON `pozycje_zamowieniowe`.`ID_wyrobu` = `wyroby4`.`ID_wyrobu` LEFT OUTER JOIN `baza`.`waluty` AS `waluty` ON `wyroby4`.`ID_waluty` = `waluty`.`ID_waluty` , `baza`.`zamawiajacy` AS `zamawiajacy`
  6.  
  7. WHERE `zamowienia`.`ID_zamawiajacego` = `zamawiajacy`.`ID_zamawiajacego` AND ( `ID_dzialu_realizujacego` = ID_dzial OR ID_dzial IS NULL) AND (loginy = SUBSTRING_INDEX ( USER(), '@', 1) OR ID_dzial IS NULL) GROUP BY `zamowienia`.`ID_zamowienia` ORDER BY `zamowienia`.`data_dodania` DESC LIMIT 15
mmmmmmm
Skopane totalnie.
1. Suma nie jest liczona z 15 rekordow, tylko z wszystkiego. Wynik jest ograniczany do 15 rekordow WYNIKOWYCH
2. aliasy służą do skracania nazw... smile.gif Serio
3. złe grupowanie
4. czy USER() to to co myślę? Nazwa zalogowanego uyżytkownika? Tworzysz użytkowników BAZODANOWYCH??
mihmih
ad1 - ale ta suma liczy wartość zamówienia, to znaczy mnoży liczbę pozycji zamówieniowych razy cenę danego wyrobu i sumuje grupując po zamówieniu. Także ograniczenie do 15 zamówień nie wpływa w żaden sposób na wartość zamówienia.
ad2 - wiem, tak naprawdę podstawę każdego zapytania robię poprzez kreator (używam Libreoffice Base połączony z Mysql), stąd tak dokładne nazwy.
ad3 - dlaczego złe? Grupuję po ID_zamowienia, tak jak tego chce. Po jakiej kolumnie miałbym grupować?
ad4 - USER() to aktualny użytkownik, jest to tabela systemowa MySql (tak mi sie wydaję) do której nie mam dostępu poprzez Libreoffice. Dlatego utworzyłem dodatkową własna tabelę, gdzie mam powtórzone nazwy użytkowników, wraz z ich nazwiskami, działami do których przynależą itd. I dzięki porównaniu
  1. `ID_dzialu_realizujacego` = (SELECT ID_dzial FROM uzytkownicy_loginy WHERE loginy = SUBSTRING_INDEX ( USER(), '@', 1))
mogę sobie wyniki wyszuiwań ograniczać tylko do tych, które interesują danego użytkownika.



EDIT: problem udało się rozwiązać za pomocą parametru - ID_dzial
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.