Topic: ... kai nežinai ką pasirinkti....

Tarkime pardavinėjame mašinas (cars lentele) kurių kiekviena turėtų turėti aprašymus (details letele) visomis pasaulio kalbomis, bet aišku vadybininkai tinginiai ir išverčia tik į 2-4 kalbas :)

cars: ID | model | engine | price
details ID | lang_id | car_id | title | body


Kokias kalbas vartotojas pripažįsta galima sužinoti iš Accept-Language headerio, Kaip atrinkti tinkamiausia kalba parašytą aprašymą? Jei reiktų paimti tik po 1-ą automobilį, tai panaudojus IF galima nesunkai išrinkti didžiausią svorį gavusį rezultatą, bet kaip tai padaryti, kai reikia paimti 20 automobilių viena užklausa?

Re: ... kai nežinai ką pasirinkti....

O pagal ką tu skaičiuoji tą svorį?

čia kalba eina apie tai, kad nėra automobilių vertimų vartotojo pasirinktai/nustatytai kalbai ir reikia parinkti kažkurią kitą iš esamų?

Re: ... kai nežinai ką pasirinkti....

>>O pagal ką tu skaičiuoji tą svorį?
Tarkime: Accept-Language: lt, ru;q=0.8, en;q=0.7

tada lt svoris bus 10, ru - 8, en - 7


>> čia kalba eina apie tai, kad nėra automobilių vertimų vartotojo pasirinktai/nustatytai kalbai ir reikia parinkti kažkurią kitą iš esamų?
Taip

Re: ... kai nežinai ką pasirinkti....

O kaip skaičiuosi jeigu pas tave nebus nei vienos iš paimėtų kalbų vertimo?

Re: ... kai nežinai ką pasirinkti....

Geras klausimas :)
bet yra ir atsakymas :D kadangi bus bent viena pagrindinė kalba (tarkim anglu) kuria bus "padengti" visi 100% automobilių, jei en nebus Accept-Language headeryje, tiesiog pridėsim en su mažiausiu prioritetu.
Aišku ateityje bus galima tiesiog trūkstamus vertimus gauti pasinaudojus google transalte, bet kol kas noriu sugalvoti, kaip viskas tūrėtų atrodyti jei nėra visų tekstų. (Suprantu tinklapis nelabai profesionaliai atrodytu, bet geriau pateikti bent esminę info "tinkama" kalba, nei išvis prarasti lankytoją).


Pirmame poste gal kiek perlenkiau lazdą su visomis pasaulio kalbomis,  realybėje bus apie 3-6 ir kuo toliau, tuo labiau mąstau apie tai kad  gal naudingiau išimti duomenis visomis kalbomis tinkamomis kalbomis (WHERE language IN (lt, en, ru)) ir jau php pagalba atrinkti tinkamą.



O šiaip realybėje, kokia struktūra yra saugoma daugiakalbė informacija?

Re: ... kai nežinai ką pasirinkti....

o nenori su php pagalba pateikti tinkama uzklausa, o ne su paprasta uzklausa pasiimti viska ir su php atsirinkti ?

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: ... kai nežinai ką pasirinkti....

Na dar vienas klausimas: verimą reikia išrinkti rodant vieną konkretų automobilį ar rodant automobilių sąrašą?

Re: ... kai nežinai ką pasirinkti....

Daznai sudetingos uzklausos yra vykdomos leciau nei tiesiog duomenu paemimas ir ju apdorojimas su PHP. Nors tai priklauso nuo aplinkybiu, bet buna daznai atveju kai geriau padaryti 2 atskiras SQL uzklausas nei 1 uzklausa su subquery.

P.S. ne viskas kas krutai parasyta yra super.

Re: ... kai nežinai ką pasirinkti....

Nenorėčiau sutikti su Neodan dėl greičių.

Kodėl? Todėl, kad praktika rodo, kad kaip tik yra efektyviau  rezultatus išsgauti būtent tuos, kurių reikia. Aišku, sutinku, kad yra visokių aplinkybių. Jas norėčiau apibendrinti iki tokių: netaikoma, kai operacijos yra toli nuo realiacinių operacijų.

Jeigu tarkime mums reikia sujungti dvi lenteles, tai jas daug greičiau sujungs MySQL'as negu mes patys tai atliksime pasiemę abiejų lentelių duomenis su PHP. Kartais (tai atvejais, kai kažkas labai labai nemoka programuoti ir pridaro daug stabžių) gali gautis, kad su PHP tai veiks greičiau. Tiesiog reikia ieškoti teisingų kelių, kaip pasiekti, kad MySQL'as pateiktu rezultatus greitai ir efektyviai. Dažnai tai atsiremia į teisingos duomenų struktūros parinkimą. Tai atvejais, kai uždaviniai iškeliami jau turint stuktūrą su sąlyga, kad jos keisti negalima, gali gautis, kad rezultatai bus greičiau pasiekiami su PHP, bet dėlto reikėtų kaltinti ne MySQL'ą, o tą, kad darė struktūrą.

Beto, LABAI DAžNAI pastebiu, kiek DAUG klaidų yra daroma projektuojant duomenų bazę. Tikrai LABAI DAUG (-;

Re: ... kai nežinai ką pasirinkti....

minde wrote:

Na dar vienas klausimas: verimą reikia išrinkti rodant vieną konkretų automobilį ar rodant automobilių sąrašą?

Jei reiktų paimti tik vieną rezultatą, bandyčiau ką nors panašaus į (tinkamiausia kalba su id=2, toliau su id=3, galiausiai imt bet ką, kas liko :))

SELECT cars.*, details.*, IF (details.language_id = 2, 2, IF (details.language_id = 3, 4, 8)) as weight FROM `cars`
LEFT JOIN details ON car.id = details.car_id
WHERE car.id = '1234'
ORDER BY weight LIMIT 1
Lukas wrote:

Kaip atrinkti tinkamiausia kalba parašytą aprašymą? Jei reiktų paimti tik po 1-ą automobilį, tai panaudojus IF galima nesunkai išrinkti didžiausią svorį gavusį rezultatą, bet kaip tai padaryti, kai reikia paimti 20 automobilių viena užklausa?

Re: ... kai nežinai ką pasirinkti....

Realiai galiu pasiūlyti tik vieną variantą (-; Bet jis nebus labai "optimalus", nes kiek žiūriu tai nelabai tinkama struktūra šiam uždaviniui.

Sprendimas būtų toks:
a) kokiu nors būdu pasikonvertuoti kalbų, gautų iš userio naršyklės kodus į vidinius language_id. Tai galima atlikti tiek su PHP, turint klasifikatorių masyve, tiek su MySQL'us sudedant tą klasifikatorių į duomenų bazę, atskirą lentelę;
b) details lentelę grupuoti pagal automobilio, rūšiuoti pagal vartotojui priimtinų kalbų aibę (.. ORDER BY language_id IN('en','de','lt');), ir išrinkti po vieną elementą iš grupės; Kaip iš gauti po vieną elementą iš grupės gali pasiskaityti čia: http://www.mysql.lt/wiki/SQL_Norimas_El … l_Atributa ; Jeigu naudotum kalbų klasifikatorių iš duomenų bazės, tai galėtum IN() operatoriui nurodyti sub-užklausą;
c) sujungti gautą rezultatą su norimų atvaizduoti automobilių aibe;

čia veikiantį variantą turėtų pasisekti parašyti, tik realiai turint daug duomenų, jis turėtų būti lėtas, nes:
a) naudojama IN() struktūra, kuri yra lėta;
b) naudojamas dinaminis skaitliukas, kuris yra lėtas;

...nebent duomenų kiekis nėra labai didelis (-;

Viską palengvinti galima būtų tada, jeigu language_id savo skaitine verte atitiktų kalbos prioritetą, tada išrenkant automobilių aprašus pagal kalbą, būtų galima naudoti MIN/MAX funkcijas, kurios yra laikomos kaip agregatinės, ir jas galima taikyti grupuojant elementus su GROUP BY.