Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dodanie warunku w WHERE
mihmih
post 9.05.2016, 14:29:09
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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?

Go to the top of the page
+Quote Post
trueblue
post 9.05.2016, 14:58:06
Post #2





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


LEFT JOIN z tabelą uzytkownicy_loginy, sprzęgnięcie na: ID_dzialu_realizujacego=ID_dzial + warunku z WHERE.


--------------------
Go to the top of the page
+Quote Post
mihmih
post 10.05.2016, 11:07:37
Post #3





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
mmmmmmm
post 10.05.2016, 12:11:13
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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??
Go to the top of the page
+Quote Post
mihmih
post 10.05.2016, 13:55:45
Post #5





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował mihmih 10.05.2016, 15:30:42
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 15:42