![]() |
![]() |
--Greg-- |
![]()
Post
#1
|
Goście ![]() |
Załóżmy, że mam 2.000.000 rekordów w bazie (podstrony serwisu) i wszędzie chcę wstawić dodatkowe teksty.
Mam 10 różnych tekstów, na każdej stronie ma być 5 tekstów (czasem może być mniej). Chodzi o to, żeby teksty na każdej stronie były poukładane w innej kolejności (wiadomo, że czasem będą powtórzenia, ale to inna kwestia i powinna pomóc synonimizacja) Po prostu ma być jak najbardziej unikalnie a teksty raz przypisane do id nie mogą się już zmieniać. Jak to zrobić ? Mój pomysł jest taki, że skoro mam id w przedziale (1...20000000) to mogę tekstom nadać numery i dla załóżmy id o numerze 12345 pojawi się kolejno pierwsze pięć tekstów i analogicznie z innymi rekordami. Problem pojawia się gdy id nie jest 5 cyfrowe, ale jeśli jest mniejsze to powiedzmy że tekstów będzie mniej, jeśli większe to odcinam nadmiar cyfr, żeby zawsze było 5 i po sprawie, gorzej jak id ma postać typu 11211, wtedy by wychodziło, że 4 razy wyświetlam tekst numer 1 co jest bez sensu. Jak to obejść najprościej i osiągnąć pożądany efekt ? Może ktoś już robił coś w tym stylu i zna lepsze ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Skoro masz X tekstów, to zrób najprostsza możliwą rzecz...
1. Utwórz tabelę, ktora ma jako pola: id_podstrony(int) i id_tekstow(varchar) 2. Przy wchodzeniu na podstronę sprawdzaj czy ma ona już w tabeli swój rekord (można od razu JOINować przy pobieraniu by było szybciej). Jeśli są to odtwórz układ tekstów z podanych id poprzez explode i poskładaj teraz te teksty, synonimizuj je i co tam chcesz zrób. 3. Jeśli nie ma, to utwórz tablicę o elementach o numerach od $a do $b, $zbior = range($a, $b); i użyj na takim zbiorze $wylosowane = array_rand($zbiór, $ile_elementow_wylosowanych); Jeśli chcesz to możesz jeszcze dla zabawy to co Ci wylosowało trzasnąć shuffle. Na koniec robisz implode i zapis do bazy. osobna tabela jest czesto lepsza z racji separacji danych od siebie. Jedna duża tabela jest często wolniejsza w działaniu niż kilka mniejszych. Ale by to wyjaśnić to już trzeba by tłumaczyć działanie silnika, sposób organizacji danych i dostępu do nich. Nie sądzę by akurat taka wiedza na tym etapie nauki była Ci szczególnie potrzebna.
Powód edycji: [thek]: Małe wyjaśnienie
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 09:42 |