Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] Podwójny ORDER BY
neoangin
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 11.07.2006
Skąd: Olsztyn

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


Witam, mam problem z napisaniem zapytania mysql. OPiszę najpierw co chciałbym osiagnac.

Chce wyświetlić posortowane firmy, które sa w katalogu wedle dwóch kreteriów. PIerwszy to data dodania , drugi data dokonania ostatniej platnosci. Wartosci tych pol mam wySELECTowane:

  1. SELECT ... c.createDate , MAX(cp.paymentDate) AS maxDate ...


I chodzi mi o to zeby na stronie glownej portalu na gorze pojawialy się firmy na zasadzie:

Każda firma przedłużająca pakiet (czyli placaca za niego) pokazuje się po przedłużeniu jako PIERWSZA – Ważne – NA STRONIE GŁÓWNEJ portalu . Tak samo jak to jest z firmami nowododającymi się.

Domyslam sie ze musze uzyc formuly "IF" , ale moze sie myle. Czy ktoś może pomóc?

  1. ORDER BY c.createDate DESC, maxDate DESC
.. ? - takie zapytanie nie dziala poprawnie gdyz tylko pierwszy ORDER jest brany pod uwage

Ten post edytował neoangin 30.06.2011, 18:57:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
neoangin
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 11.07.2006
Skąd: Olsztyn

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


Niestety z GREATEST nie działa poprawnie. Sortuje tylko podbite firmy. Podejrzewam, że dlatego bo na tabele companyPayments jest LEFT JOIN.

Ale pokombinowalem z tym CASE i dziala teraz dobrze. Oto caly dzialajacy kod:


  1.  
  2. SELECT SQL_CALC_FOUND_ROWS
  3. c.idCompany, c.idProvince, c.idCompanyEnc, c.companyName, c.companyAlias, c.companyPhone, c.companyFax, c.companyEmail, c.companyWWW, c.companyCity, c.modifyDate, c.createDate, cd.companyDesc, cd.companyContact, cs.isPremium,
  4.  
  5. [b]CASE cs.isFreePeriod WHEN 1 THEN c.createDate ELSE MAX(cp.dateAdd) end AS szukanyDate[/b]
  6.  
  7. FROM v_companies_statuses cs
  8. LEFT JOIN companies c ON c.idCompany = cs.idCompany
  9. LEFT JOIN companyDetails cd ON cd.idCompany = cs.idCompany AND cd.idLanguage = 1
  10. LEFT JOIN companyPayments cp ON c.idCompany = cp.idCompany
  11.  
  12. WHERE
  13. c.isActive = 1
  14. AND cs.isVisible = 1
  15. AND c.isDeleted = 0
  16.  
  17. GROUP BY c.idCompany
  18. ORDER BY szukanyDate DESC
  19. LIMIT 0,10


Ten post edytował neoangin 30.06.2011, 22:27:36
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: 24.12.2025 - 06:17