![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taką tabelkę w DB która przetrzymuje różnego rodzaju banery
(dokładnie przetrzymuje banery które są wyświetlane w różnych częściach strony - top,bottom,left,right). I teraz mój problem polega na tym że potrzebuję w jednym zapytaniu dostać po jednym banerze należącym do danej części strony (jeden baner dla części strony top, jeden baner dla części strony bottom, jeden baner dla części strony left, jeden baner dla części strony right). Czyli dokładnie potrzebuję dostać 4 banerki (różne) - losowe , tak aby się nie powtarzały. Struktura tabeli wygląda tak:
'site' to właśnie położenie baneru na stronie: 1- top, 2-bottom, 3-left, 4-right. Proste zapytanie które zwróci mi jeden rekord wygląda tak:
jednak zwraca on jeden tylko rekord z tabeli, a ja potrzebuje po jednym rekordzie z każdej części strony (top, bottom, left , right) W padłem na takie rozwiązanie:
Jednak nie wiadomo czemu zawsze wyświetla te same rekordy więc coś ten RAND() nie działa tu chyba poprawnie. Próbowałem też z DISTINCT ale tez nie odniosło to żadnych efektów:
Macie może jakiś pomysł jak to poprawnie zrobić - gdzie robie błąd?. A może tego nie idzie zrobić (z jakiś tam względów). Pozdrawiam, -------------------- Pozdrawiam,
Sokrates |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 20 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem czy to coś da ale spróbuj(dodałem limit na końcu)
Kod SELECT *
FROM baners WHERE active =1 AND start_time <= '1214943678' AND end_time >= '1214943678' GROUP BY site ORDER BY RAND( ) limit 4 -------------------- Impossible is nothing!!! |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie da...
Z LIMIT też próbowałem ale już nie chciałem się tu rozpisywać... Pozdrawiam... -------------------- Pozdrawiam,
Sokrates |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 1 Dołączył: 14.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o procedurach składowych (stored procedures) lub/i wyzwalaczach (triggers).
Uważaj z której wersji bazy danych korzytasz, ponieważ te możliwości dostępne są od niedawna. -------------------- "Bramy skarbnicy mądrości i wiedzy są zawsze otwarte"
|
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o procedurach składowych (stored procedures) lub/i wyzwalaczach (triggers). Uważaj z której wersji bazy danych korzytasz, ponieważ te możliwości dostępne są od niedawna. Tym bardziej wolał bym tego uniknąć... Szczerze mówiąc zamiast tego wolał bym już wywołać w pętli foreach 4 razy zapytanie:
Przypisując za każdym razem zmiennej $site inny parametr. Pozdrawiam... -------------------- Pozdrawiam,
Sokrates |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
możesz zastosować podzapytanie:
-------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
możesz zastosować podzapytanie: To działa , ale pytanie jest o wydajność pod zapytań? Choć widzę że na 10 rekordach jakie obecnie posiadam zapytanie z subselectem zajmuje jakieś 0.0010 sekund(y) a zapytanie typu:
zajmuje jakieś 0.0008 sekund(y) ale tą wartość trzeba pomnożyć przez liczbę parametru site (w moim przypadku 4,top, bottom, left, right) Więc wstępnie mogę powiedzieć że pod zapytanie jest lepsze/oszczędniejsze Pozdrawiam,... -------------------- Pozdrawiam,
Sokrates |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:45 |