Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql][rozwiazanie]pozapytanie pobierające ostania akcje
Hpsi
post
Post #1





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Witam, z góry przepraszam jeśli mylący jest troszkę temat ale za chiny nie mogłem znaleźć tytułu do mojego problemu (IMG:style_emoticons/default/wink.gif)
Co do problemu zdaje mi się ze chyba gdzieś zabłądziłem myślami i dlatego muszę Was poprosić o pomoc (IMG:style_emoticons/default/smile.gif)
Opis problemu:
Mam sobie 3 tabelki
// serwer z którego pobieram nazwę
// domena która z której pobieram wszystkie informacje
// akcje z której chcę pobrać datę ostatniej akcji
Skrócona wersja tabeli akcje (Bo chce tylko wyciągnąć date)
  1. CREATE TABLE `akcje`
  2. (
  3. `id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  4. `data` date NOT NULL,
  5. `domena_id` int(10) NOT NULL
  6. );


Problem wydaje się banalny jeśli bym chciał wykonać najpierw zapytanie domena->serwer i dodatkowo np w while dodac date ostaniej akcji, no ale jeśli brać pod uwagę, że może być to np 50 domen z których pobieram dane, to mogło by być troszkę nieoptymane.

aktualnie moje zapytanie do sql wygląda tak
  1. $this->engine->db->query('
  2.  
  3. SELECT
  4. `d`.*, `serwer`.`nazwa` AS `serwer_nazwa`,
  5. IF(`d`.`data_in`<"'.date('Y-m-d', time()-(60*60*24*7)).'", 1, 0) AS `bold` ,
  6. IF(`d`.`data_in`<"'.date('Y-m-d', time()-(60*60*24*15)).'", 1, 0) AS `error`
  7. FROM
  8. |domeny| AS `d`
  9. LEFT JOIN
  10. |serwer| AS `serwer`
  11. ON
  12. `d`.`serwer`=`serwer`.`id`
  13. ORDER BY `d`.`id` ASC');

i w tym momencie się zawiesiłem , jak pobrać dodaktowo jeszcze datę ostaniej akcji z tabeli akcje w tym zapytaniu

A i dodatkowo w instrukcjach warunkowych w zapytaniu muszę zamienić `d`.`data_in` własnie na tą datę którą pobiorę z akcji...

----
Edit:
Tak jak myślałem sposób rozwiazania mojego problemu był banalny, wystarczyła kawa + papieros i zaraz umysł się rozjaśnił:
  1. $this->engine->db->parse('
  2.  
  3. SELECT
  4. `d`.*, `serwer`.`nazwa` AS `serwer_nazwa`,
  5. IF(`a`.`data`<"'.date('Y-m-d', time()-(60*60*24*7)).'", 1, 0) AS `bold` ,
  6. IF(`a`.`data`<"'.date('Y-m-d', time()-(60*60*24*15)).'", 1, 0) AS `error`
  7. FROM
  8. |domeny| AS `d`
  9. LEFT JOIN
  10. |serwer| AS `serwer`
  11. ON
  12. `d`.`serwer`=`serwer`.`id`
  13. LEFT JOIN
  14. |links| AS `a`
  15. ON
  16. `d`.`id`=`a`.`do`
  17. GROUP BY `d`.`id`
  18. ORDER BY `d`.`id` ASC, `a`.`data` DESC');


Ten post edytował Hpsi+ 3.06.2011, 09:32:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Hpsi
post
Post #2





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


@thek własnie gdyby była ta zależność nie musiał bym myśleć nad tym zbytnio , problem polegał na tym iż akcje mogły być wprowadzone z datą wstecz ... i dlatego właśnie musiałem pokombinować, znów zrobić na zasadzie updata tabeli w czasie dodawania akcji - szczerze wolałem to rozwiązać dając JOIN niż się bawić w warunki sprawdzające, tylko z drugiej strony pytanie brzmi ile stracę poprzez własnie tego typu zapytanie (Chodzi o czas generowania zapytania np przy 100 domenach)

--
Jednak zapytanie skonociłem, wyświela mi się w liście domen, każda z domen tyle razy ile akcji jest wprowadzona...
Eh jednak człowiek zawsze o czymś zapomni i po napisaniu postu przypomni sobie - sorry za zaśmiecanie troszkę, zapomniałem dodać GROUP ...

Ten post edytował Hpsi+ 3.06.2011, 09:31:15
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 6.10.2025 - 08:08