tomaac Posted January 8, 2008 Report Share Posted January 8, 2008 Problēma: Nepieciešams atrādīt tabulu ar daudzām rindām. Rezultāti jāsadala "pa lapām", ļaujot lietotājam šķirstīt lapas. Katrā lapā 40 rindas. Iespējamais risinājums: 1) Ar SELECT-a palīdzību atlasa visus datus vienā lielā masīvā. 2) Iet cauri šim masīvam un ar vienu PHP funkciju pārbauda katru rindu. Ir derīgās/nederīgās rindas. Tādējādi atsijā šīs nederīgās rindas. 3) Rezultātā izveidots masīvs tikai ar derīgām rindām. 4) Sarēķina no kuras līdz kurai rindai jārāda dotajā lapā. Atrāda. Problēmas: Nesmuki sanāk, ka šķirstot lapas viss process jāveic par jaunu. Tas var radīt ātrdarbības problēmas. P.S. Nevar šobrīd izdarīt tā, ka to PHP funkciju iebūve kaut kā Sql-ā, lai nevajadzētu iet ar ciklu cauri visām masīva rindām. Vai ir kādas idejas? Link to comment Share on other sites More sharing options...
Aleksejs Posted January 8, 2008 Report Share Posted January 8, 2008 Kāpēc nevar ar SQLu? Ja varētu - tas būtu visoptimālākais. Link to comment Share on other sites More sharing options...
andrisp Posted January 8, 2008 Report Share Posted January 8, 2008 Lapošana šajā forumā ir vairākas reizes aprunāta. Paskaties arī satura rādītājā. Un izmanto MySQL LIMIT. Link to comment Share on other sites More sharing options...
tomaac Posted January 8, 2008 Author Report Share Posted January 8, 2008 Tur jau tā problēma, ka šeit nesanāk izmantot nekādu limitu. Tas ir tādēļ, ka izpildot selectu mēs vēl nezinām cik rindas patiesībā no tā rezultāta vajadzēs. Piemēram, limit 0, 40 varētu izrādīties nepareizi, jo pēc tam ar php funkciju daļa rindu tiktu uzskatītas par nederīgām... Sql funkcija neder, jo šobrīd lielā sistēmā ir viena php funkcija, kuru nepieciešams "uzlaist" katrai rezultāta rindai. Savukārt šī funkcija ir diezgan sarežģīta ,izmanto citas funkcijas utt. Teorētiski šķiet, ka varētu to arī par sql funkciju pārtaisīt, nedaudz čakars būtu, kā arī tad sistemā būtu divas vienādas funkcijas (viena php un viena mysql). Bet tiek meklēts cits risinājums. Link to comment Share on other sites More sharing options...
aldis Posted January 8, 2008 Report Share Posted January 8, 2008 Pirms to rindu publicēšanas nevar saskaitīt rindas? Un kā publicē tā ieraksta datubāzē rindu skaitu? Link to comment Share on other sites More sharing options...
Aleksejs Posted January 8, 2008 Report Share Posted January 8, 2008 Atkarībā no lietotāju skaita un tā cik ļoti atkarīgi šie dati ir no tām PHP funkcijām- var rezultātu (iegūto PHP masīvu) ierakstīt temp_session tabulā pie pirmā pieprasījuma un pēc tam veikt vaicājumus no šīs temp_session tabulas. Link to comment Share on other sites More sharing options...
Delfins Posted January 8, 2008 Report Share Posted January 8, 2008 Nu nekas tur nebūs nepareizi - tā dara visur: - dabū skaitu (COUNT(*) + WHERE) - dabū izvēlēto lapu - pārbauda vai lapa ir robežās (< count / skaits_uz lapu), ja nē, tad lapa = 0 - veic to pašu pieprasījumu tikai atrādei un ar LIMIT - SQL skaitam kešo, ja dati nemainās ļoti bieži (hash(SQL) => skaits) Viss! Nav te ko iespringt! Link to comment Share on other sites More sharing options...
andrisp Posted January 8, 2008 Report Share Posted January 8, 2008 Cilvēks laikam datu atlasi veic PHP pusē. Nu tad cits nekas neatliek kā katru reizi pieprasīt visu to gūzmu datus. Vienīgi, ja šie dati mainās reti vai nebieži, tad var kešot tos. Link to comment Share on other sites More sharing options...
bubu Posted January 8, 2008 Report Share Posted January 8, 2008 Ieliec tajā tabulā vēlvienu kolonnu - booleanu vai_derigs. Un selekto tikai tās rindas, kur tas ir TRUE. Pie katrām datu izmaiņām (INSERT, UPDATE) palaid savu php funkciju, kura updeito šo vai_derigs flagu pie izmainītajiem ierakstiem. Link to comment Share on other sites More sharing options...
tomaac Posted January 8, 2008 Author Report Share Posted January 8, 2008 Bubu: Tāds variants arī neder, jo šī TRUE/FALSE rindiņa nav statiska. Piemēram, atkarīga no lietotāja, kurš izmanto sistēmu un citiem apstākļiem. Link to comment Share on other sites More sharing options...
Aleksejs Posted January 8, 2008 Report Share Posted January 8, 2008 Grūti kaut ko ieteikt nezinot detaļas, bet vēl vari arī veidot "attiecību" tabulu, kurā ieraksti objekta_ID, PHP_kalkulēto_vērtību, Lietotāja_ID, Pieprasījuma_ID(vai pieprasījuma parametrus). Un ievietot šajā tabulā pēc 1. pieprasījuma datus. Pēc tam ik pa brīdim veikt kaut kādu " garbage collection"... Link to comment Share on other sites More sharing options...
aldis Posted January 8, 2008 Report Share Posted January 8, 2008 Dari ka mani mācija vecais informātikas učuks - panem papiira lapu rokaas.. un saac ziimeet.. tabuliski ko veelies panaakt! Vismaz kaadas 3 lapas sakuma izmetisi laukaa.. tikai pacietibu... ziimee taalaak.. un mozh izdomaasi liidz galam, pamaniisi savas kluudas.. un sapratiisi kaa ko veikt! Jo man skiet seit iisti neviens nesaprot kas tew tur pa buudu top, kapec tadi pierpasijumi unj veel katram lietotajam mainas... k-gan nav zinams kam mainities.. brr.. Link to comment Share on other sites More sharing options...
Delfins Posted January 8, 2008 Report Share Posted January 8, 2008 atkarīga no lietotāja, kurš izmanto sistēmu un citiem apstākļiem. Tāpēc iekš SQL ir izdomātas tādas lietas kā: JOIN WHERE EXISTS HAVING Link to comment Share on other sites More sharing options...
Recommended Posts