![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 5.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z zapytaniem SQL, a konkretnie GROUP BY. Skrypt wyszukuje w bazie rekordy, ktore najelpiej pasuja do szukanego slowa ($search) pod wzgledem h1, title pomnozone przez odpowiednie liczby-parametry. Rekordy powinny byc wybrane z bazy, jesli sortowanie>0.
Wyszukane rekordy grupuje wg tytulu. Nie wszystkie rekordy danej grupy jednak spelniaja warunek sortowanie>0. Jesli jednak ktorys z rekordow go spelnia to i tak laczy sie z reszta rekordow danej grupy. Wynikiem sa pola description, title, link, date odpowiednie dla pierwszego rekordu danej grupy. A chcialbym, aby byly one dla rekordu z grupy o najwiekszej wartosci sortowanie. Jak mam to zrobic? Ponizej fragment kodu. Prosze o pomoc.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Może zainteresuj się klauzulą HAVING
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 5.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
próbowałem dać GROUP BY title HAVING sortowanie>0
ale dla grupy jest to prawda, jeśli tylko jeden rekord spełnia ten warunek... Ten post edytował modo 21.10.2008, 09:31:07 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 52 Pomógł: 10 Dołączył: 6.10.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
nie jestem pewien czy dobrze rozumiem:
Kod having max(sortowanie) ? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 5.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie bardzo działa...
a może w ten sposób, żeby zapytanie pobierało z tabeli rekordy o różnych wartościach pola title ale tych o największej wartości sortowanie? może da się to zrobić bez GROUP BY, ale z użyciem DISTINCT? jeśli tak to jak dokładnie? próbowałem, ale niebardzo... Próbowałem już różnych zapytań i nadal nic nie wychodzi. Może przedstawię to jaśniej i może ktoś będzie wiedział, jak się z tym uporać. Mam tabelę site: +----+-------+------------+------+ | id | title | link | body | +----+-------+------------+------+ | 1 | str1 | str1/1.htm | aaa | | 2 | str1 | str1/2.htm | xxx | | 3 | str1 | str1/3.htm | bbb | | 4 | str2 | str2/1.htm | ccc | | 5 | str2 | str2/2.htm | xxx | Zmianna $search='xxx'; Wynikiem powinno byc: +----+-------+------------+------+ | id | title | link | body | +----+-------+------------+------+ | 2 | str1 | str1/2.htm | xxx | | 5 | str2 | str2/2.htm | xxx | Próbowałem:
Ale to łączy wszystkie rekordy wg title jeśli tylko jeden spełnia warunek sortowanie>0 (przez co pola link, body są dowolne). Jeszcze raz proszę o pomoc. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
lub
albo
To ktore rozwiazanie bedzie najszybsze pozostawiam Tobie do sprawdzenia. W pierwszym przypadku druga tabela tymczasowa jest potrzebna poniewaz MySQL-owe tabele tymczasowe maja takie ograniczenie, ze nie moga byc uzyte dwa razy w jednym zapytaniu (tt - tabela tymczasowa: SELECT ... FROM tt WHERE ... = (SELECT ... FROM tt WHERE ...) nie zadziala) Ten post edytował osiris 26.10.2008, 12:50:48 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 16:41 |