Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomoc w zapytaniu do bazy., Zagnieżdżone tabele?
BigBenek
post 19.01.2013, 02:35:26
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 19.01.2013

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


Witam Forumowiczów.

Z uwagi, że nie jestem "bazodanowcem", a administratorem sieci, zwracam się do Was o pomoc.

Mam tabelę "projekty". Tabela zawiera id i id klienta.
Mam również 5 tabel w której trzymam umowy powiązane z projektami.
Tabele umów zawierają między innymi id projektu i pole "zapłacono".

Potrzebuję zadać bazie pytanie, które poda mi id projektu, w którym znajdują się umowy, które mają "status" niezapłacone (pole 'zaplacone' w tabeli umów ma wartość 0 dla nie i wartość 1 dla tak).

Przeguglałem trochę, jednak nie wiem, o co pytać.
Moje tymczasowe query do bazy, które zwraca dobry wynik dla jednej tabeli umów wygląda tak:

  1. SELECT projekty.id, projekty.userid, faktura.projectid, dzwiekfaktura.zaplacono WHERE faktura.projectid=projekty.id AND faktura.zaplacono='0';


Na tej podstawie wymyśliłem zapytanie:

  1. SELECT projekty.id, projekty.userid, dzwiekfaktura.projectid, dzwiekfaktura.zaplacono, dzwiekumowa.projectid, dzwiekumowa.zaplacono, obrazekfaktura.projectid, obrazekfaktura.zaplacono, obrazekumowa.projectid, bankmuzyki.projectid, bankmuzyki.zaplacono FROM projekty, dzwiekfaktura, dzwiekumowa, obrazekfaktura, obrazekumowa, bankmuzyki WHERE dzwiekfaktura.projectid=projekty.id AND dzwiekfaktura.zaplacono='0' OR dzwiekumowa.projectid=projekty.id AND dzwiekumowa.zaplacono='0' OR obrazekfaktura.projectid=projekty.id AND obrazekfaktura.zaplacono='0' OR obrazekumowa.projectid=projekty.id AND obrazekumowa.zaplacono='0' OR bankmuzyki.projectid=projekty.id AND bankmuzyki.zaplacono='0';


Niestety, zwraca również projekty, w których znajdują się zapłacone (1) umowy.

Proszę o pomoc w wygenerowaniu właściwego zapytania.

Dziękuję i pozdrawiam.

Go to the top of the page
+Quote Post
mortus
post 19.01.2013, 11:00:55
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Oj, chyba ta baza danych jest konkretnie skopana. Jak wyglądają poszczególne tabele i dlaczego masz taki dziwny podział np. dzwiekfaktura, dzwiekumowa?
Go to the top of the page
+Quote Post
sazian
post 19.01.2013, 12:28:45
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


po pierwsze lepiej używać złączeń
czyli np.
  1. SELECT * FROM tab1
  2. JOIN tab2 ON tab1.id=tab2.kolumna1

po drugie na klawiaturze masz taki klawisz ja enter, używaj go czasem tongue.gif

po trzecie pogrupuj warunki logiczne nawiasami
TRUE && TRUE || TRUE && FALSE == FALSE
(TRUE && TRUE) || (TRUE && FALSE) == TRUE
niby to sano, a wynik inny
Go to the top of the page
+Quote Post
BigBenek
post 19.01.2013, 22:45:08
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 19.01.2013

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


Witam.

Możliwe, że baza i struktura jest "skopana", nie mniej jednak jak do tej pory spełnia swoją rolę.
Prędkość jej działania to ostatni element, którym się zainteresuję, a raczej nie będę musiał tego robić (jak na możliwości MySQla niewiele rekordów i bardzo mało użytkowników).

Dzisiaj udało mi się stworzyć zapytanie, które całkowicie rozwiązuje mój problem:

  1. SELECT id FROM `projekty`
  2. WHERE
  3. id IN ( SELECT projectid FROM bankmuzyki WHERE `zaplacono`='0')
  4. OR
  5. id IN ( SELECT projectid FROM dzwiekfaktura WHERE `zaplacono`='0')
  6. OR
  7. id IN ( SELECT projectid FROM dzwiekumowa WHERE `zaplacono`='0')
  8. OR
  9. id IN ( SELECT projectid FROM obrazekfaktura WHERE `zaplacono`='0')
  10. OR
  11. id IN ( SELECT projectid FROM obrazekumowa WHERE `zaplacono`='0');


Dziękuję za sugestie, mam również nadzieję, że "enter" jest częściej używany smile.gif

Pozdrawiam.
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: 16.07.2025 - 13:14