Jump to content
php.lv forumi

kā panākt ...


snach15

Recommended Posts

bet MySql un SQL ir tomēr aršķirība ... nējav kautkas slēpjas tajā kad esmu slinks .. redz kad pats rakstīju kad izdevās pašam kautkā sakodēt čakarējoties un lasot ntos forumus un ntās pamācības .. diemžēl neizdodas joprojām uzrakstīt tā kā itkā tas būtu pareizi .. personīgi man liekas diezgan sarežģīta lieta .. un lai to vispār uzrakstītu ir vajadzīga saprašana kā to izdarīt .. jo zini konkrēti katru rindiņu kur ko likt tad jav elementāri arī būtu .. bet ja nav sajēga ko kur likt tad tas ir čav .... viegli ir tādā gadījumā ja kāds uzrakstu nu piemēru.. domāju kad tadiem koderiem kā jums tas nevarētu būt grūti un vairāk par 3 minūtēm tas neaizņemtu .. bet mja var saņemt tikai pārmetumus kad viss ir nepareizi un kautkādus googles linkus kur nav ne pamatojuma scriptam nekas .. vsp kautkādi scriptu kur kautkas tāds ir minēts .. še kodē ... es tak labi teicu kad man nevajg visu scriptu lai kāds uzraksta .. bet kautvai ar vārdiem uzrakstīt kam jābūt kā jābūt vai vismaz labākajā gadījumā tur kādu mazu piemēru (nepabeigtu scriptu) tas tak nav nemaz tik grūti ... bet kam ir jā .. varbūt drīzāks skopums nevis slinkums ... bet mja paldies visiem tāpat kas centās un atmeta googles linkus un nolasīja kritiku kad viss ir galīgi garām ..

Edited by snach15
Link to comment
Share on other sites

Kā es risinātu problēmu:

 

1) Prasīts: Noteikt iepriekšējā mēnesī reģistrēto lietotāju skaitu

2) Dots: DB tabula ar lietotājiem, katram lietotājam dots reģistrēšanas datums un laiks

 

Kā mēs to varam izdarīt?

 

1) SQL izteiksme jāveido tā, lai tā atlasītu tikai tos ierakstus, kas atbilst iepriekšējam mēnesim, raugoties no pieprasījuma viekšanas brīža

2) SQL izteiksme jāpapildina tā, lai tā izvadītu ierakstu daudzumu, nevis ierakstus

 

Punktā (1) runa ir par WHERE (kur) nosacījumu, kurā mēs izmantosim salīdzināšanu gan ar katra ieraksta datumu, gan ar šodienas datumu. Punktā (2) mēs izmantosim grupēšanas funkcijas (agregātfunkcijas).

 

Reģistrēšanas laiks var būt norādīts kā timestamp (skaitlis INT formātā, jeb sekundes no 1970.01.01. 0:00), kā DATE vai DATETIME lauks (datubāzes iekšējais formāts, kura spēks ir izmantojot SQL datumu funkcijas), vai kā tavā gadījumā, string (dd.mm.yyyy). Manuprāt, pēdējais variants nav slikts, bet nav arī labs. Tas nav nepareizs, bet labāk ir izmantot DATE tipa lauku.

 

Tā kā date tipa lauks netiek izmantots, mēs to pārveidosim. To var izdarīt ar funkciju, kuru atradīsim MySQL manuāļa sadaļā Date and Time functions.

Pārveidot no stringa:

mysql> SELECT DATE('2003-12-31 01:02:03');

-> '2003-12-31'

Pārveidot no timestamp:

mysql> SELECT FROM_UNIXTIME(1196440219);

-> '2007-11-30 10:30:19'

 

Protams, SQL izteiksmē mēs piemēros redzamās konstantes aizvietosim ar attiecīgo datubāzes lauku.

 

Šos piemērus der arī uzreiz SQL konsolē pamēģināt, paskatīties arī kā citas funkcijas darbojas! Funkcija DATE() nederēs, jo tev datums ir norādīts citādā formātā, tāpēc tavs uzdevums ir atrast īsto funkciju - FUNKCIJA1(datums) => <SQL datums>

 

Tālāk apskatīsimies, kā atrast iepriekšējo mēnesi. Tas, ko tev vajadzēs, ir salīdzinājums WHERE izteiksmes daļā:

 

<datubāzes rindas mēnesis> = <iepriekšējais mēnesis>

 

Tavs uzdevums:

 

1. Tajā pašā manuāļa sadaļā atrast funckiju, kas atgriež mēneša ciparu no datubāzes lauka - FUNKCIJA2(<SQL datums>) => [1 - 12]

 

Kā atrast iepriekšējo mēnesi? Tas tev būs pa grūtu, tāpēc uzrakstīšu priekšā: SUBDATE(NOW(), INTERVAL 1 MONTH); Tavs uzdevums ir atrast manuālī šo funkciju, izlasīt tās aprakstu, paspēlēties ar to.

 

Tātad, esam nonākuši līdz tam, ka SQL WHERE izteiksme būs tāda:

 

FUNKCIJA2(FUNKCIJA1(datums)) = FUNKCIJA2(SUBDATE(NOW(), INTERVAL 1 MONTH))

 

Viss, kas mums atliek, ir saskaitīt šos laukus, ko daram ar COUNT(*). Tā kā mēs skaitām visus laukus, GROUP BY daļu SQL izteiksmē neliekam.

 

Tavs uzdevums - uzrakstīt pilnu SQL izteiksmi. Pielāgot, lai to var izmantot pagājušās dienas, nedēļas, gada utml. reģistrēto lietotāju skaita noteikšanai.

 

Vēlu veiksmi!

Edited by Mr.Key
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...