Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
Andrzej Banach pisze:
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
tak zupełnie na ślepo:
SELECT ... FROM nodes n LEFT JOIN nodeassignments na ON (n.id=na.nodeid) WHERE na.id IS NULL
nie mam jak teraz sprawdzić i dawno nie używałem bazy LMS, ale chyba coś w ten deseń...
pozdrawiam, Dawid W
!DSPAM:4a11c64f58951711816961!
Takie cos dziala napewno na MySQL tutaj gotowy fragment do wklejenia w LMS.class.php w function customerstats. Mysle ze w postgre tez zatrybi
Pozdrawiam
$notariff['notariff'] = $this->DB->GetOne('SELECT COUNT(customers.id) FROM customers LEFT JOIN assignments ON customers.id = customerid WHERE deleted = 0 AND (customerid IS NULL OR NOT ((datefrom <= UNIX_TIMESTAMP() OR datefrom = 0) AND (dateto > UNIX_TIMESTAMP() OR dateto = 0)))'); $result = array_merge($result, $tmp, $notariff);
---- Wiadomość Oryginalna ---- Od: widynek widynek@o2.pl Do: lista użytkowników LMS lms@lists.lms.org.pl Data: 18 maja 2009 22:34 Temat: Re: [lms] zapytanie postgresql
Andrzej Banach pisze:
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
tak zupełnie na ślepo:
SELECT ... FROM nodes n LEFT JOIN nodeassignments na ON (n.id=na.nodeid) WHERE na.id IS NULL
nie mam jak teraz sprawdzić i dawno nie używałem bazy LMS, ale chyba coś w ten deseń...
pozdrawiam, Dawid W
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
!DSPAM:4a11c86159844380352099!
Przemysław Bryniak pisze:
Takie cos dziala napewno na MySQL tutaj gotowy fragment do wklejenia w LMS.class.php w function customerstats. Mysle ze w postgre tez zatrybi
Pozdrawiam
$notariff['notariff'] = $this->DB->GetOne('SELECT COUNT(customers.id) FROM customers LEFT JOIN assignments ON customers.id = customerid WHERE deleted = 0 AND (customerid IS NULL OR NOT ((datefrom <= UNIX_TIMESTAMP() OR datefrom = 0) AND (dateto > UNIX_TIMESTAMP() OR dateto = 0)))'); $result = array_merge($result, $tmp, $notariff);
Jak dobrze rozumuje to zapytanie jest pomocne przy powiazaniach klient-taryfa. Ja jak pisalem uzywam powiazan komputer-taryfa. Tak wiec thx za pomoc, ale to troszke nie to co probuje zrobic.
widynek pisze:
Andrzej Banach pisze:
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
tak zupełnie na ślepo:
SELECT ... FROM nodes n LEFT JOIN nodeassignments na ON (n.id=na.nodeid) WHERE na.id IS NULL
nie mam jak teraz sprawdzić i dawno nie używałem bazy LMS, ale chyba coś w ten deseń...
Niestety jezeli komputer nie ma przydzielonej taryfy to w nodeassignments nie ma wogole rekordy z jego "nodeid". Nie wiem co baza wskazuje gdy chcemy powiazac te tabele a nie ma odpowiednika w drugiej tabeli, ale to zapytanie nie zwraca poszukiwanych komputerow :( Chyba bedzie trzeba zrobic petelki i przeszukac jakich kompow brakuje w nodeassignments.
Ps. thx za pomoc.
W dniu 2009-05-18 20:10, Andrzej Banach pisze:
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
SELECT * FROM nodes WHERE nodes.id NOT IN (SELECT DISTINCT nodeid FROM nodeassignments)
Powinno wystarczyc
!DSPAM:4a11e11775752079114581!
SELECT * FROM nodes WHERE nodes.id NOT IN (SELECT DISTINCT nodeid FROM nodeassignments)
Powinno wystarczyc
Niestety nie wystarczy, jezeli stosuje sie zarowno taryfy dla poszczegolnych komputerow, jak i dla uzytkownikow. Pelna wersja dzialajaca na 1.11.7 wyglada tak :
SELECT * FROM nodes WHERE ( nodes.id NOT IN (SELECT DISTINCT nodes.id FROM nodes, assignments WHERE nodes.ownerid = assignments.customerid) ) AND ( nodes.id NOT IN ( SELECT DISTINCT nodeid FROM nodeassignments) ) AND (nodes.ownerid > 0)
Pierwsza regulka wycina taryfy uzytkownikow, druga komputerow, a trzecia sprzet sieciowy.
Pozdrawiam
Waldemar Dymkiewicz pisze:
W dniu 2009-05-18 20:10, Andrzej Banach pisze:
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
SELECT * FROM nodes WHERE nodes.id NOT IN (SELECT DISTINCT nodeid FROM nodeassignments)
Powinno wystarczyc
Thx wielkie Wam wszystkim. O to chodzilo. Powycinam jeszcze niepotrzebne rzeczy i bedzie gitara.
Witam; Podpowie ktos jak powinno wygladac zapytanie wyrzucajace wszystkie komputery bez przydzielonych taryf? Uzywam powiazan komputer-taryfa. Fakt ze z sql'em mi nie po drodze, ale zawsze jakies proste zapytanie potrafilem stworzyc. W tym przypadku jednak po przestudiowaniu struktury bazy danych nawet nie wiem co z czym powiazac. Kombinowalem z tabela nodeassignments i wyszukiwaniem gdy nodeid=null, ale takich wpisow nie ma. Jezeli komp nie ma taryfy to i powiazania w bazie nie ma. Poratuje ktos gotowym zapytaniem lub chociaz naprowadzi na prawidlowy tok myslenia by takie zapytanie stworzyc?
-- Andrzej Banach net-komp.net.pl
podobny przykład (do wykonania w module sql):
# klienci bez taryfy, oprocz oczekujacych (działa na psql) SELECT customers.id, customers.lastname, customers.name FROM customers LEFT JOIN assignments ON customers.id = customerid WHERE deleted = 0 AND (customers.status = 3) AND (customerid IS NULL OR NOT ((datefrom <= EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0)) OR datefrom = 0) AND (dateto > EXTRACT(EPOCH FROM CURRENT_TIMESTAMP(0)) OR dateto = 0)))
Jak zrobisz swoje zapytanie, to się pochwal ;-)
malpi
!DSPAM:4a124c0d165352079114581!
uczestnicy (6)
-
Andrzej Banach
-
malpi
-
Przemysław Bryniak
-
Szymon Kajewski
-
Waldemar Dymkiewicz
-
widynek