pionas
6.10.2013, 16:01:46
Cześć,
mam pewien problem.
Otóż chciałbym wyświetlić 5 osób w taki sposób, aby wyświetliło pierwszą, środkową, ostatnią i jeszcze osobę po środku pierwszej a środkowej i środkowej a ostatniej.
Np. mam 100 osób, czyli wyświetlam osobę 1, 50, 100 i 25 i 75.
Jak coś takiego zrobić? Biorąc pod uwagę też że mogę chcieć wyświetlić np. 7 osób 9 lub 10 i itp...
Szymciosek
6.10.2013, 16:16:21
Matematyka się kłania.
100 osób na 5, które chcesz wyświetlić = 25, więc to jest Twój skok.
Zaczynasz od stworzenia liczb z ID osób, które mają być wyświetlone i lecisz od początku wybierając je sobie z bazy poprzez
WHERE user.id = 1
WHERE user.id = 25
WHERE user.id = 50
WHERE user.id = 75
WHERE user.id = 100
Pierwszy musi być wklejony na sztywno, a później to już tylko skok co 25.
To jest rozwiązanie na 100 osób, z czego 5 chcesz wyświetlić.
Schody zaczynają się, gdy masz 7 osób do wyświetlenie wtedy 100/7 = 14,285714286, więc takiego skoku nie wykonasz. Tutaj sugerowałbym wtedy zaokrąglić liczbę do góry i będzie 15.
pionas
6.10.2013, 16:37:55
Czyli pobrać wszystkie rekordy z tabeli i zrobić coś takiego:
$osoby = array(1,2,3,4,5,6...50,51,52,....75,76,77,....99,100);
$ile_wyswietlic = 5;
$wszystkie_osoby = count($osoby);
$osoba[] = $osoby[0];
$osoba[] = $osoby[($wszystkie_osoby-1)];
$skok = ceil($wszystkie_osoby/$ile_wyswietlic);
for ($i=1;$i<=($ile_wyswietlic-2);$i++) {
$osoba[] = $osoby[($skok*$i)];
}
to by było coś takiego?
Szymciosek
6.10.2013, 16:41:53
Nie zbyt wydajne. Po co pobierać wszystkie osoby skoro w ostateczności operujesz na 5?
Sklej sobie jakieś zapytanie, które wyglądałoby tak:
SELECT * FROM persons p WHERE p.id IN (1,25,50,75,100)
Ty masz tylko zrobić taki string, który będzie zawierał te dane. Jeżeli korzystasz np. z PDO możesz sobie poczytać o tym jak w IN wsadzić array z liczbami.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.