Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Posegregowanie tabeli w bazie oraz przypisanie wyników zmiennym
Forum PHP.pl > Forum > Przedszkole
konradkw
Staram się napisać taki niewielski skrypt który by wykonałby poniższe wyliczenie:

Przeszukanie tabeli w bazie
w tabeli znajduje się 6 kolumn a użytkownik w innej części całego skryptu wpisuje sześć cyfr (tą część już mam). Dane wpisane przez użytkownika w formularzu zostają zapisane w bazie w tych wlasnie kolumnach oznaczonych L1, l2, l3 ...:

przykład:

L1 L2 L3 L4 L5 L6
02 12 24 33 38 41
11 13 18 28 31 44
i tak dalej dla dowolnej ilości danych wpisanych przez użytkownika ale tylko w tych 6-u kolumnach (dowolna ilość linii)

teraz trik polega na tym żeby nie tylko posortować wyniki w każdej kolumnie ale żeby zwrócić wynik w stylu:

Liczb 14 było 34
Liczb 28 było 12
i tak dalej dla każdej wartości znalezionej w tablicy lub może żeby ułatwić dla każdej liczby of 01 do 50.

Dodatkowo chciałbym żeby powyższy wynik był zapisany w postaci zmiennej - tak żeby, mógł go użyć później czyli dla przykładu:

załóżmy że skrypt posegregował i policzył wynik (ile razy występuje) liczba 10 więc chciałbym żeby istniała taka zmienna na przyklad $wynik10 która przyjęła by wartość ilości wystąpień liczby 10 w tabeli.

Ma to sens? Mam nadzieję że rozumiecie o co mi chodzi.
Chodzi mi tylko o kawałek skryptu który zróbiłby w skrócie następujące istrukcje:

1. posegregować zawartość tabeli
2. przypisać wyniki zmiennym o nazwach &wynik01, &wynik02, &wynik03 ... do $wynik50, gdzie wynikiem jest ilość wystąpień danej liczby w tabeli .

Jesli macie jakieś pytania, bardzo chętnie wyjaśnię wiecej ale myślę że to powinno wystarczyć.

Z wyświetleniem i innymi wyliczeniami sobie już poradzę - to będą działania logiczne, dlatego potrzebuję wyniki w zmiennych.


Tak mi właśnie przyszło do głowy taka podpowiedź:
pętla segregująca zawartość tablicy sprawdzając zawartość mogłaby porównywać każdy z wpisów z liczbami od 1 do 50 i jeśli to co jest sprawdzane dla przykładu jest równe 01 to $wynik01 = $wynik01 + 1; i wtedy na koniec dostanę 50 zmiennych z dokładną szęstością występowania każdej z liczb w pożądanej formie tylko teraz tak, z porównaniem chyba sobie poradzę ale jak sprawdzić każdy element tablicy we wszystkich sześciu kolumnach jednocześnie kończąc w momencie zakońćzenia się kolumny poszczególnej żeby pętla nie wracała do początku i nie robiła tego w nieskończoność? Zgaduję że tu którejś pętli powinienem użyć tylko jak jej użyć żeby zwracała pojedynczą wartość i porównywała ją z każdą z 50u liczb? hmmmm




Może zamiast zmiennych można by z wyników zrobić tablicę składający się z 50u elementów? od 1 do 50?
wydaje mi się że wtedy kod byłby krótszy , tylko wtedy jak wyświetlić zawartość tej tablicy posegregowaną od najwyższej wartości do najniższej?



Coś takiego?
http://php.net/manual/pl/function.uasort.php



tak sobie pomyślałem że dla uproszczenia można by użyć jednej kolumny zamiast 6-u poniewaz tak czy inaczej będą dane przetważane razem ale wtedy znowu nie mogę danych wyświetlić w kolejności wprowadzania prawda?



Ten skrypt jest rozwinięciem tego: Temat: PHPMySQL Sprawdzenie kodu na zapis i wyswietlenie danych z bazy danych
Aktualizowałem już tego posta już chyba 10 razy, bardzo proszę o pomoc bo jestem troszkę w kropce.
Daimos
Jeżeli w tabeli będziesz miał sporo rekordów, to Twój pomysł całkowicie odpada. Do każdego wyliczenia musisz pobierać wszystkie rekordy. Proponowałbym Ci zrobić tabelę na statystyki
Teraz skoro twierdzisz, że jest maksymalnie 50 liczb, to widzę dwa wyjścia:
1. Tabela np. stats, a w niej dwie kolumny (stats_number i stats_value) i 50 rekordów dla każdej możliwej liczby.
Przy dodawaniu przez użytkownika cyferek, po prostu sprawdzasz co dodał i uaktualniasz tą tabelę za każdym razem, ktoś wybrał liczbę 2 i 5? Uaktualniasz rekord w tej tabeli
  1. UPDATE stats SET stats_value = stats_value + 1 WHERE stats_number = 2 AND stats_number = 5

2. Zrobić 50 kolumn + możesz dodatkowe, np. z datą
ls_id / ls_date / ls_1 / ls_2 / ls_3 / ls_4 / ls_5 / ls_6 / ls_7 .... i tak do 50
I możesz zrobić terminowe statystyki, kiedy (np danego miesiąca, dnia) było ile liczb wybranych

Oczywiście to wymaga od Ciebie więcej, bo musisz pilnować dodawania i usuwania cyferek, ale przynajmniej będzie lżej niż proponujesz wink.gif

Jeśli mimo to, chcesz po swojemu, to zostaje Ci wykorzystanie COUNT w zapytaniu (google it) i sprawa w sądzie za zabójstwo bazy danych w przyszłości wink.gif
konradkw
Witam. Dzięki za podpowiedź. Nie jestem pewiej czy dobrze wyraziłem o co mi chodzi .. Jak pisałem o 50-u liczbach to miałem na mysli ze użytkownik może wpisać liczby tylko od 01 do 50 co oznacza że w tabeli bedzie 50 liczb i tyle zmiennych chciałbym uzyskać a wynikami byłyby liczby określające ile razy każda z tych 50u liczb została wpisana. Uzytkownik bedzie wpisywał po 6 liczb i nie będzie możliwości wpisania liczby niższej niż 01 czy wyższej niż 50.

Czy w takim wypadku statystyki też są dobrym rozwiązaniem?

Szczerze nie bardzo umiem użyc tych statystyk jeszcze ale się uczę smile.gif Count już znam ale czego nie wiem to jak pobrać pojedynczą wartość z bazy i użyć jej do porównania.

Ma to sens?

takie szybkie pytanko jeszcze.. czy bardzo by się taki skrypt różnił gdyby zamiast sortować on najwyższej wartości, zwracał tylko 6 najniższych wartości? zakładam że wystarczyłoby użyć pętli i równania logicznego żeby je porównać i wtedy otrzymamy dla przykładu

[php] if $wynik1 < (wszystkie inne zmienne) {
echo $wynik1;
}
else
if $wynik2< (wszystkie inne zmienne) {
echo $wynik2;
}

Wiem że to niema większego sensu ale tak schematycznie w głowie to widzę.. Chociaż co się stanie jeśli niektóre będą miały tą samą wartość? wtedy przecież nie wyświetli się nic bo nie będzie mniejsza od innych tylko równa więc wynik wyjdzie zły...ale też skrypt musiałby dodatkowo używać tylko tych wartości (zmiennych) - (przyrównywać dalej do innych) które jeszcze nie zostały użyte a te które już sa wyświetlone powinny nie być brane pod uwagę bo wyświetliłaby się tylko jedna liczba lub skrypt nigdy by się nie skończył (pętla)

Co o tym sądzicie?




jeszcze mam jeden pomysł...

Co bybyło gdyby dać użytkownikom możliwość wpisania tylko jednej liczby na raz i po wpisaniu ta liczba byłaby sprawdzana i dla przykładu jeśli liczba to 10 to w tabeli wyszukiwane byłoy pole dziesiąte i jego wartość zwiększała by się o jeden (w tablicy jest tylko jedna kolumna z 50=oma elementami nazwanymi: 01,02,03,04,05....50) w ten sposób baza nie przetwarza całóości przy podawaniu wyników a tylko wymagane byłoby wyświetlenie 6-u z najniższą wartością na daną chwilę.

Czy tak byłoby łatwiej?
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.