Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie 2 zapytań MySQL w jedno i grupowanie wyników
northwest
post 18.01.2015, 22:55:34
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Witam serdecznie,
Mam taką tabelę:

  1.  
  2.  
  3. CREATE TABLE IF NOT EXISTS `cms_pojazd` (
  4. `bf_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  5. `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `cena` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  7. `promowanedata` date DEFAULT NULL,
  8. UNIQUE KEY `id` (`bf_id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  10.  


Chciałbym za pomocą 1 zapytania wyświetlić najpierw produkty promowane (czyli te które mają w kolumnie promowanedata "ważną datę") - a następnie pozostałe rekordy (te których promocja minęła lub nigdy nie były promowane).
Produkty promowane wiem że mogę wyświetlić poprzez: SELECT * FROM cms_pojazd WHERE DATE(promowanedata) >= DATE(NOW()) - ale czy da się połączyć to w 1 zapytanie ze zwykłymi (SELECT * FROM cms_pojazd)?

Bardzo proszę o pomoc,
Northwest

Próbowałem takie coś: SELECT * FROM cms_pojazd where $selkateg enable ='1' $typo ORDER by promowanedata DESC, nazwa ASC
ale nie poprawnie sortuje sad.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
SpiritCode
post 19.01.2015, 06:35:15
Post #2





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


Może spróbuj UNION?
Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 11:17:18
Post #3





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


z tym UNION'em nie bardzo chce to działać jak powinno sad.gif
może opiszę jeszcze raz co chciałbym uzyskać:
a) wyświetlenie alfabetycznie na pierwszych pozycjach promowane ogłoszenia (im dłużej ważne - tym wyżej)
cool.gif wyświetlenie pozostałych ogłoszeń pod tymi promowanymi - alfabetycznie

Czyli:
- Ogłoszenie premium ważne do grudnia
- Ogłoszenie premium ważne do listopada
- Ogłoszenie premium ważne do marca
- "A" - ogłoszenie - nigdy nie premium
- "B" - ogłoszenie - nigdy nie premium
- "C" - ogłoszenie - "kiedyś" premium
- "D" - ogłoszenie nigdy nie premium
itp
Go to the top of the page
+Quote Post
thek
post 19.01.2015, 11:47:32
Post #4





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




Ale z drugiego zapytania musisz wyrzucić te, które Ci się już w pierwszym znalazły. I dopiero wtedy UNION między nimi. Inaczej duplikaty Ci się porobią.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 11:53:21
Post #5





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


No właśnie na tym utknąłem.... da się to zrobić 1 zapytaniem?
Czy mógłbym prosić o takie zapytanie?
Go to the top of the page
+Quote Post
Pyton_000
post 19.01.2015, 12:17:21
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zrób to normalnie UNION czyli 1 zapytanie które wybiera Ci Premium i drugie Nie premium
Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 12:22:51
Post #7





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


no tak, ale to 2 zapytania... czyli nie da się tego zrobić w 1 zapytaniu?
Go to the top of the page
+Quote Post
Pyton_000
post 19.01.2015, 12:27:37
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Przecież to będzie 1 zapytanie :| złożone z 2 podzapytań.
Go to the top of the page
+Quote Post
redeemer
post 19.01.2015, 12:27:54
Post #9





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Możesz zrobić "sztuczną kolumnę z wykorzystaniem instrukcji warunkowej IF, tzn. odejmujesz czas zakonczenia promocji od czasu aktualnego i jeśli > 0 to zostawiasz różnice, jak < 0 to wstawiasz 0. Sortujesz potem po dwóch kolumnach - po "sztucznej" i nazwie.


--------------------
Go to the top of the page
+Quote Post
nospor
post 19.01.2015, 12:33:10
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




... order by if(promowanedata >=now(),promowanedata, \'1980-09-09\') desc
Prosze, jedno zapytanie smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 12:44:28
Post #11





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Dziękuję bardzo. Jest prawie dobrze wink.gif sortuje po datach promowanych (od najdłużej ważnych do tych których ważność minęła) -a później nie premium.

Problem jest w tym że:
a) nie sortuje ogłoszeń "nie premium" - alfabetycznie
cool.gif ogłoszenia których termin "minął" = nie są już traktowane jako premium

Mam takie zapytanie: SELECT * FROM cms_pojazd where enable ='1' order by if(promowanedata >=now(),promowanedata, '2015-01-19') desc

Jeszcze raz dziękuje za pomoc smile.gif
Go to the top of the page
+Quote Post
nospor
post 19.01.2015, 12:47:04
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ogłoszenia których termin "minął" = nie są już traktowane jako premium
Jak napisales na poczatku tak dostales smile.gif Nie moja wina, ze teraz zmieniles specyfikacje na poczekaniu tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 12:48:51
Post #13





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Przepraszam, głupio to napisałem.... Później to dopisałem, ale chyba nie jasno sad.gif

Jeśli mógłbyś mi pomóc z tym co napisałem w poprzednim poście, to byłbym bardzo wdzięczny
Go to the top of the page
+Quote Post
nospor
post 19.01.2015, 12:50:44
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




order by if(promowanedata >=now(),promowanedata, \'1980-09-09\') desc, pole_do_sortowania_alfabetycznego

A jesli interesuje cie jakakolwiek promowanadata to:

order by if(promowanedata is not null ,promowanedata, \'1980-09-09\') desc, pole_do_sortowania_alfabetycznego
bo zakladam, ze gdy nie byla promowana to miala wartosc NULL


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 12:59:34
Post #15





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


dziekuje smile.gif
Go to the top of the page
+Quote Post
nospor
post 19.01.2015, 13:28:47
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Choc nie rozumiem, czemu nie dzialalo ci poprostu to:
order by promowanedata desc, pole_do_sortowania_alfabetycznego
to powinno samo z siebie robić to co chcesz bez żadnego kombinowania


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
northwest
post 19.01.2015, 13:30:56
Post #17





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Promowane ogłoszenia "wygasłe" sortował źle;)
Go to the top of the page
+Quote Post
nospor
post 19.01.2015, 13:33:02
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zrozumialem, z ktoregos kolejnego posta, ze wygasle tak czy siak mialy byc wyzej nad w ogole nigdy nie promowanymi. Jesli nie, to faktycznie nie mialo to prawo dobrze działać smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 5.07.2025 - 15:17