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
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A po co robić datę? (IMG:style_emoticons/default/wink.gif) Zauważ jedną prostą zależność.... Akcja o późniejszej dacie ma jednocześnie wyższy ID... Co nam to daje? Wychodzimy od tabeli akcje jako bazowej i łaczymy z wybranymi innymi tabelami, czyli domena oraz serwer po właściwych kluczach oraz... wybieramy ograniczenia czyli albo domenę albo serwer czy co tam chcesz, sortujemy po ID malejąco i birzemy tyle rekordów w LIMIT ile Ci pasuje (IMG:style_emoticons/default/smile.gif)
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: 3.10.2025 - 07:12