Jump to content
php.lv forumi

Joyride

Reģistrētie lietotāji
  • Posts

    168
  • Joined

  • Last visited

Posts posted by Joyride

  1. Vaicājums apmēram šāds:

     

    SELECT a.field1,

    SUM(b.field2) AS smth1,

    GROUP_CONCAT(c.field3 SEPARATOR ',') AS smth2

    ...

    FROM a

    LEFT JOIN b ON a.b_id = b.id

    LEFT JOIN c ON b.c_id = c.id

    LEFT JOIN d ON b.d_id = d.id

    LEFT JOIN e ON d.e_id = e.id

    WHERE ...

    GROUP BY ...

    ORDER BY ...

    LIMIT 0, 50

     

    Izpildes laiks ir ap 12sec.

     

    JOINotas astoņas tabulas, citas pie galvenās, citas pie jau JOINotajām. Visām tabulām ir indeksi uz ID un uz tā lauka, ar kuru tiek veikts JOINs. Vienai tabulai ierakstu skaits > 100'000, citai ~50'000, citai ~20'000, pārējās ir pavisam nelielas.

     

    Noņemot nost JOINu uz to tabulu, no kuras tiek veikts GROUP_CONCAT, atšķirība minimāla. Ja samazina atlasāmo ierakstu skaitu no 50 uz 25, atšķirība praktiski nekāda.

     

    Ko vēl varētu izdarīt, lai šo vaicājumu paātrinātu?

  2. Aleksej, paldies par saitēm, bet Sitepoint ir izskatīts krustām šķērsām un jautājumi joprojām ir palikuši neatbildēti.

     

    Protams, varēju tur uzsākt šo tēmu, taču kaut kā dzimtā valoda tuvāka :)

  3. Visi vairāk vai mazāk zin, kādi ir MVC arhitektūras slāņi (Model / View / Controller).

     

    Šobrīd prātoju par Model daļu. Agrāk tika uzskatīts, ka modelis ir objekts, kas reprezentē kaut ko (rakstu, foruma tēmu, komentāru, lietotāju, produktu, iepirkumu grozu, ...) un viņš arī satur metodes saglabāšanai, dzēšanai, datu atlasei u.c.

     

    Tagad lasu, ka pareizi ir sadalīt atbildību - modeli dalīt vairākos slāņos:

    Entity (vienkārša datu struktūra - tas, kas agrāk tika saprasts kā modelis, tikai bez pārējās funkcionalitātes),

    Service (kas veic darbības ar Entity),

    Gateway / Mapper (kas atlasa pēc dotajiem kritērijiem Entity/-ies).

     

    Vai kāds ar izpratni par šo visu varētu izskaidrot sīkāk? Ļoti noderētu kāds konkrēts piemērs.

     

    Man neskaidras ir vairākas lietas:

    * kāda tieši ir katra slāņa atbildība (kas atlasa datus, kas saglabā / dzēš, kas veic specifiskas darbības ar konkrēto Entity)?

    * ar ko atšķiras Gateway no Mapper?

    * kā notiek hierarhisku datu atlase (rakstam var būt piesaistīti komentāri)?

    * kāpēc datu atlasi veic Gateway / Mapper, nevis Service?

  4. Ir tabulas PASŪTĪJUMI un POZĪCIJAS. Vienam pasūtījumam var būt apakšā viena vai vairākas pozīcijas.

     

    Dati tiek atlasīti tādā veidā, ka par pamatu tiek ņemta POZĪCIJU tabula un pie tās tiek piesaistīti pasūtījumi:

     

    SELECT ...
    FROM positions
    LEFT JOIN orders ON positions.order_id = orders.id
    GROUP BY positions.id, ...
    LIMIT ???

     

    Un tad PHP pusē atlasītās rindas tiek sagrupētas pa pasūtījumiem.

     

    Problēma ir tāda, ka vajag kaut kādā veidā dalīt pa lapām, bet nav iespējams limitēt pēc galvenās tabulas POZĪCIJAS,

    jo tad ir iespēja, ka pasūtījums tiks "aprauts".

    Nevaru izdomāt, kā varētu to darīt pēc PASŪTĪJUMU tabulas, teiksim atlasīt pozīcijas, kuras ir pēdējos 5 pasūtījumos.

     

    Vai kāds var kaut ko ieteikt?

  5. Nesanāk...

     

    Izveicu testu uz visām utf_? kollācijām, rezultāti šādi:

     

    utf8_general_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_bin		   : A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, S, T, U, V, Z, Ā, Č, Ē, Ģ, Ī, Ķ, Ļ, Ņ, Š, Ū, Ž, 
    utf8_unicode_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_icelandic_ci  : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_latvian_ci	: Ā, A, B, C, Č, D, E, Ē, F, G, Ģ, H, Ī, I, J, K, Ķ, L, Ļ, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Z, Ž, 
    utf8_romanian_ci   : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_slovenian_ci  : Ā, A, B, C, Č, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Z, Ž, 
    utf8_polish_ci	 : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_estonian_ci   : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, Z, Ž, T, Ū, U, V, 
    utf8_spanish_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_swedish_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_turkish_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, I, Ī, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_czech_ci	  : Ā, A, B, C, Č, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Z, Ž, 
    utf8_danish_ci	 : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_lithuanian_ci : Ā, A, B, C, Č, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Z, Ž, 
    utf8_slovak_ci	 : Ā, A, B, C, Č, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Z, Ž, 
    utf8_spanish2_ci   : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_roman_ci	  : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, J, I, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, V, U, Ž, Z, 
    utf8_persian_ci	: Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_esperanto_ci  : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    utf8_hungarian_ci  : Ā, A, B, Č, C, D, E, Ē, F, Ģ, G, H, Ī, I, J, Ķ, K, Ļ, L, M, N, Ņ, O, P, R, S, Š, T, Ū, U, V, Ž, Z, 
    
    
    character_set_client = utf8
    character_set_connection = utf8
    character_set_database = utf8
    character_set_filesystem = binary
    character_set_results = utf8
    character_set_server = utf8
    character_set_system = utf8
    character_sets_dir = C:\HTTPServer\MySQL\share\charsets\
    
    
    collation_connection = utf8_general_ci
    collation_database = utf8_latvian_ci
    collation_server = utf8_general_ci

     

    Skripts ir šeit.

  6. Sveiki,

     

    Ir datubāze un tabulas utf8 charsetā, noklusētais collation - utf8_unicode_ci.

     

    Jautājums vienkāršs: kā panākt, lai dati latviešu valodā kārtotos pareizā secībā? Problēma slēpjas tajā, ka garumzīmes tiek liktas pirms burta bez garumzīmes:

    IR [Ābols, Amerika, ...], JĀBŪT [Amerika, Ābols, ...]

     

    Mēģināju paspēlēties ar dažādiem collation (unicode, genetal, latvian), bet nekā.

     

    Un kā ar citām valodām? Varbūt kāds var pastāstīt par savu pieredzi un "zemūdens akmeņiem" apstrādājot datus daudzās valodās...

  7. andrisp - Paldies! $GLOBALS['_SERVER'] nestrādāja, bet $_SERVER strādā!

     

    Unset globālajiem taisu tādēļ, lai programmētājs būtu spiests lietot Request klasi, lai piekļūtu šiem mainīgajiem, jo pirms tam vajag veikt dažādus drošības pasākumus, piem. strip_tags, vai stripslashes, atkarībā no mainīgā + vēl rewrite url funkcionalitāte (nevis $_GET['module'], bet, piem. $REQUEST->module, $REQUEST->lang, $REQUEST->param('id') utt.) un daudzas citas lietas. Vārdu sakot, vienots interfeiss. Bez tam tiks lietots custom sesiju klase, tā kā par $_SESSION arī var aizmirst.

    Pagaidām netiek izmantots neviens 3rdparty skripts. Ja būs vajadzība pēc kāda, tad veikšu mazas izmaiņas :)

  8. Ir TRequest klase, kura kalpo ka reģistrs visiem superglobāļiem (GET, POST, COOKIE, SERVER)

     

    class TRequest
    {
    $SERVER = array();
    
    public function __construct()
    {
    	$this->SERVER = $GLOBALS['_SERVER'];
    	unset($GLOBALS['_SERVER']);
    }
    }

    Lieta tāda, ka ja PHP konfigurācijā "auto_globals_jit" ir uzstādīts uz "On", tad:

     

    "the SERVER and ENV variables are created when they're first used (Just In Time) instead of when the script starts."

    Šādā gadījumā, TRequest::__construct metodē $GLOBALS['_SERVER'] ir neeksistējošs mainīgais, tā arī ir problēma, kuru gribu atrisināt.

    Viens variants ir kautkur ārpus visām klašu metodēm un funkcijām (piem. skripta sākumā) likt PHP izveidot šo mainīgo kaut vai šādi:

     

    $_SERVER['dummy'] = 1;

    ... un tad izveidot Request klasi. Vai ir vēl kāds veids to panākt, nepiesārņojot kodu ar šādu paņēmienu?

  9. ini_set('display_errors', 'On');
    ini_set('display_startup_errors', 'On');
    error_reporting(E_ALL | E_STRICT);

     

    un paskaties PHP konfigurācijā, vai pie "disabled_functions" nav "ini_set".

     

    EDIT: Kas tas ir par erroru? Ja tas ir parse error, fatal error utml, ko nevar noķert ar PHP error handleri un ja PHP konfigurācijā kļūdu paziņojumi netiek rādīti, tad nekas nesanāks...

  10. Ir pašrakstīta XHR wrappera klase (izņēmu ārā visu lieko kodu, lai nejauktu galvu):

     

    function Ajax()
    {
    var _this = this;
    
    // Šeit klasei varam piekļūt ar "this"
    
    function checkTimeout()
    {
    	// ...
    }
    
    this.execute = function()
    {
    	// Šeit klasei varam piekļūt ar "_this"
    
    	interval_id = setInterval("???.checkTimeout();", 1000); // Problēma !!!
    }
    }

     

    Kā lai šeit norāda, kas ir owneris f-jai checkTimeout? "this" tiek uztverts kā parent f-ja "execute", "_this" ir "undefined"...

  11. Es daru tā, ka man ir pamata konfigurācijas masīvs $CFG, kurā glabājas DB uzstādījumi utml. Tajā pašā masīvā izveidojam jaunu elementu:

    $CFG['maintenance'] = false;

    un kodā attiecīgi:

    if($CFG['maintenance'])
    {
    die('Tiek veiktas izmaiņas, pienāciet vēlāk!');
    }
    
    // ... šeit iet tālāk tavs kods ...

  12. Vajadzētu jūsu palīdzību XHTML pārsēšanā. Domāju izmantot php expat XML parseri. Šāds ir pirmais mēginājums, bet ir problēma: doctype netiek atlasīts. PHP manuālī rakstīts, ka jālieto arī xml_set_default_handler():

     

    What goes not to another handler goes to the default handler. You will get things like the XML and document type declarations in the default handler.

    ...bet arī nekā (handleris ne reizi netiek izsaukts).

     

    Vai kāds nevarētu palīdzēt atrast piemēru, kā pilnībā varētu XHTML kodu pārvērst tree-like veidā, lai pēc tam ērti var piekļūt tagiem un to parametriem?

×
×
  • Create New...