ďťż
 
[MySQL] kolejność w ramach typu ďťż
 
[MySQL] kolejność w ramach typu
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MySQL] kolejność w ramach typu



Paweł - 13-08-2006 00:23
[MySQL] kolejność w ramach typu
  Mam w tabeli rekordy. Jest kolumna typ. Każdy rekord ma jako "typ"
liczbę od 1 do 10.
Rekordy można wyświetlać na www wybierając tylko typ 1, tylko typ 2,
itd.
Ale kolejność wyświetlania w ramach każdego typu (1..10) jest - na
razie - raczej stała.
W tej tabeli jest (ma być - liczę na pomoc) też kolumna kolejność.

Chodzi mi o to, aby można było - w ramach każdego typu - wyświetlać
rekordy w kolejności - WHERE typ = 3 ORDER by kolejność

W jaki sposób (jakiego zapytania użyć) wpisać przypadkowe liczby do
"kolejność".
Tzn. np. w tabeli jest 200 rekordów gdzie typ = 3.
I te 200 rekordów musi dostać wpisy do kolumny "kolejność" -
przypadkowe liczby od 1 do 200. Te liczby nie powinny się powtarzać,
tzn. każdy rekord (typ = 3) powinien dostać inną liczbę z zakresu
1..200, której nie ma żaden inny rekord typ = 3.

Chcę, aby ta czynność była automatycznie wykonywana co kilka dni, po
każdej takiej generacji kolejność wyświetlania rekordów powinna być
inna.

Dziękuję. Paweł





Artur Gancarz - 13-08-2006 00:23

  Użytkownik Paweł napisał:
> Mam w tabeli rekordy. Jest kolumna typ. Każdy rekord ma jako "typ"
> liczbę od 1 do 10.
> Rekordy można wyświetlać na www wybierając tylko typ 1, tylko typ 2, itd.
> Ale kolejność wyświetlania w ramach każdego typu (1..10) jest - na razie
> - raczej stała.
> W tej tabeli jest (ma być - liczę na pomoc) też kolumna kolejność.
>
> Chodzi mi o to, aby można było - w ramach każdego typu - wyświetlać
> rekordy w kolejności - WHERE typ = 3 ORDER by kolejność
>
> W jaki sposób (jakiego zapytania użyć) wpisać przypadkowe liczby do
> "kolejność".
> Tzn. np. w tabeli jest 200 rekordów gdzie typ = 3.
> I te 200 rekordów musi dostać wpisy do kolumny "kolejność" - przypadkowe
> liczby od 1 do 200. Te liczby nie powinny się powtarzać, tzn. każdy
> rekord (typ = 3) powinien dostać inną liczbę z zakresu 1..200, której
> nie ma żaden inny rekord typ = 3.
>
> Chcę, aby ta czynność była automatycznie wykonywana co kilka dni, po
> każdej takiej generacji kolejność wyświetlania rekordów powinna być inna.
>
> Dziękuję. Paweł

Witaj,
jeśli ci bardzo nie zależy na "niepowtarzalności" a jedynie na zmianie
kolejności okresowo, to możesz dopuścić, że liczby będą się powtarzały,
nie prawdaż? Co najwyżej za kilka dni będą się powtarzać liczby w innych
rekordach. To wystarcza, aby co kilka dni "układ/kolejność" się
zmieniały (zakładam, że każdy z rekordów posiada również swój numer
identyfikacyjny, który nie będzie się zmieniał).
Wtedy jednym zapytaniem "generujesz" numerki:

update tabela set kolejnosc=rand();

rand() to funkcja losowa z liczbami od 0 do 1 z dokładnością do
kilkunastu miejsc po przecinku. Wystarczy że kolumna "kolejność" będzie
liczbą rzeczywistą i kolejność gotowa. Przy naprawdę nieszczęśliwym
zbiegu okoliczności będziesz miał wygenerowanych kilka takich samych
liczb, ale przecież chodzi o zmianę kolejności co kilka dni, a nie o
"unikalność" tego pola (w moim rozumieniu nie musi być unikalne do tego
celu).

pozdrawiam
Artur




ktostam - 16-08-2006 01:26

  Paweł napisał(a):
> Mam w tabeli rekordy. Jest kolumna typ. Każdy rekord ma jako "typ"
> liczbę od 1 do 10.
> Rekordy można wyświetlać na www wybierając tylko typ 1, tylko typ 2, itd.
> Ale kolejność wyświetlania w ramach każdego typu (1..10) jest -na razie
> - raczej stała.
> W tej tabeli jest (ma być - liczę na pomoc) też kolumna kolejność.
>
> Chodzi mi o to, aby można było - w ramach każdego typu - wyświetlać
> rekordy w kolejności - WHERE typ = 3 ORDER by kolejność
>
> W jaki sposób (jakiego zapytania użyć) wpisać przypadkowe liczby do
> "kolejność".
> Tzn. np. w tabeli jest 200 rekordów gdzie typ = 3.
> I te 200 rekordów musi dostać wpisy do kolumny "kolejność" - przypadkowe
> liczby od 1 do 200. Te liczby nie powinny się powtarzać, tzn. każdy
> rekord (typ = 3) powinien dostać inną liczbę z zakresu 1..200, której
> nie ma żaden inny rekord typ = 3.
>
> Chcę, aby ta czynność była automatycznie wykonywana co kilka dni, po
> każdej takiej generacji kolejność wyświetlania rekordów powinna być inna.

skoro ma byc to robione raz na kilka dni, nie trzeba specjalnie glowic
sie wydajnoscia. proponuje w zapytaniu pobrac wszystkie rekordy z tabeli
w kolejnosci losowej, a nastepnie w php lub innym srodowsiku, odczytywac
je w petli, na podstawie kolejnych wartosci typ zwiekszac odpowiednie
liczniki w tablicy zawierajacej wszystkie mozliwe wartosci pola typ.
nastepnie wykonac zapytanie aktualizujace dany rekord i nadajac mu
kolejnosc taka jak przed chwila co zwiekszony indeks danego typu. i
powtarzamy petle da kolejnych rekordow. proste, skuteczne... :)

pozdrawiam




Paweł - 16-08-2006 01:26

  > update tabela set kolejnosc=rand();

Dziękuję za odpowiedź.
Utworzyłem kolumnę kolejność typu mediumint
a zapytanie dałem takie:
update tabela set kolejnosc=rand() * 8388600;
Działa bardzo dobrze.

Co do powtarzania - tak, może się powtarzać,
dobrze by było tylko, żeby MySQL zapytany
o wszystkie rekordy zwracał je (jeśli będą np.
3 rekordy z "kolejność" = np. 10) w tej samej
kolejności przy kolejnych odsłonach.
Chodzi tutaj o Googlebota.





Paweł - 16-08-2006 01:27

  Dziękuję za odpowiedź.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?= [MySQL] Czy da =?ISO-8859-2?Q?si=EA_wykonac_takie_powi=B1z?==?ISO-8859-2?Q?anie_mi=EAdzy_tabelami=2C_i_jak_to_odpyta=E6_? ==?ISO-8859-2?Q?=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nawschodzie.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com