Jump to content
php.lv forumi

Gints Plivna

Reģistrētie lietotāji
  • Posts

    472
  • Joined

  • Last visited

Contact Methods

  • Website URL
    http://datubazes.wordpress.com
  • ICQ
    0

Profile Information

  • Gender
    Male

Gints Plivna's Achievements

Newbie

Newbie (1/14)

  1. Vienmēr jau nu vajadzētu nenoslinkot un iedot skriptu + piemēra datus. Bet nu es izdarīju pats, jo piemērs likās interesants. CREATE TABLE applications ( id int primary key, email varchar(100)); insert into applications values (1, '[email protected] '); insert into applications values (2, ' [email protected]. '); insert into applications values (3, '[email protected]'); insert into applications values (4, '[email protected] '); insert into applications values (5, '[email protected] '); insert into applications values (6, ' [email protected] '); insert into applications values (7, ' [email protected].'); insert into applications values (8, '[email protected] '); Nu tātad LIKE '%email%' īsti neder, jo tad [email protected] būs tas pats, kas [email protected]. Tāpēc man šķiet, ka vajadzētu uzrakstīt f-ju, kas katru e-pastu noved līdz nosacītai normālformai, lai tur būtu palicis tikai, tas ko vajag, piemēram: mysql> select id, trim('.' FROM trim(t1.email)), email -> from applications t1; +----+-------------------------------+--------------+ | id | trim('.' FROM trim(t1.email)) | email | +----+-------------------------------+--------------+ | 1 | [email protected] | [email protected] | | 2 | [email protected] | [email protected]. | | 3 | [email protected] | [email protected] | | 4 | [email protected] | [email protected] | | 5 | [email protected] | [email protected] | | 6 | [email protected] | [email protected] | | 7 | [email protected] | [email protected]. | | 8 | [email protected] | [email protected] | +----+-------------------------------+--------------+ 8 rows in set (0.00 sec) Un tad jau tālāk var urbt vai nu ar group by: mysql> select trim('.' FROM trim(t1.email)), count(*) -> from applications t1 -> group by trim('.' FROM trim(t1.email)) -> having count(*) > 1; +-------------------------------+----------+ | trim('.' FROM trim(t1.email)) | count(*) | +-------------------------------+----------+ | [email protected] | 4 | | [email protected] | 3 | +-------------------------------+----------+ 2 rows in set (0.00 sec) vai arī group_concat: mysql> select trim('.' FROM trim(t1.email)), group_concat(id) -> from applications t1 -> group by trim('.' FROM trim(t1.email)) -> having count(*) > 1; +-------------------------------+------------------+ | trim('.' FROM trim(t1.email)) | group_concat(id) | +-------------------------------+------------------+ | [email protected] | 1,2,3,4 | | [email protected] | 5,6,7 | +-------------------------------+------------------+ 2 rows in set (0.00 sec) mysql> select trim('.' FROM trim(t1.email)), group_concat(email) -> from applications t1 -> group by trim('.' FROM trim(t1.email)) -> having count(*) > 1; +-------------------------------+----------------------------------------------+ | trim('.' FROM trim(t1.email)) | group_concat(email) | +-------------------------------+----------------------------------------------+ | [email protected] | [email protected] , [email protected]. ,[email protected],[email protected] | | [email protected] | [email protected] , [email protected] , [email protected]. | +-------------------------------+----------------------------------------------+ 2 rows in set (0.00 sec) Ja neder trimi, tad var meklēt patternu <simbols>@<simbols>.<simbols>, bet cik atceros tad vispārīgā gadījumā e-pasta specifikācija bija nenormāli čakarīgs pasākums un gandrīz katrai regulārajai izteiksmei, kas apraksta e-pastu, var atrast kādu piemēru, kas pēc specifikācijas neder :) Gints Plivna http://datubazes.wordpress.com
  2. Gribētu redzēt, kā Tu dabūsi ∞ ekskursantus ;) Es teiktu, ka augšējā robeža teorētiski ir ne vairāk kā iedzīvotāju skaits uz Zemes, bet praktiski krietni mazāks skaitlis :)
  3. Interesanti, gan jau Red Hats aizvāks MySQLu no noklusētās instalācijas. Ņemot vērā faktu, ka Oracle savāca RH Linuxu un uz tā pamata uzbūvēja savējo un faktu, ka jau iepriekš RH tas nepatika, ir tikai loģiski, ka RH un Oracle turpinās sava starpā ēsties. Viss jau galu galā slēpjas naudā, ieņēmumos un to savākšanā vairāk man un mazāk konkurentam. Es varu saprast visus tos argumentus, izņemot absolūtos Open Source zēlotus, kas neatkarīgi no visa cita grib tikai OS, kaut gan domāju, ka 99,9% šo cilvēku tajā sourcē ne reizi pat nav iekšā ieskatījušies, nemaz nerunājot par jebkā mainīšanu. Tas par to argumentu, ka MariaDB ir labāka par MySQL, jo tas vairs nav tīrs Open Source :)
  4. Atļaušos atbildēt. Ir vismaz 2 varianti: 1) Būt pietiekami disciplinētam un kodējot jebkurām shēmas izmaiņām uzreiz rakstīt ALTER skriptus, vai nu citu kas tur nepieciešams. 2) Ja tas kaut kādu iemeslu dēļ nav iespējams, tad var salīdzināt 2 shēmas un manuāli vai automātiski ģenerēt izmaiņu skriptu. Google iesitot compare schema mysql var dabūt optom variantus, sākot jau ar MySQL paša rīku mysqldbcompare. Protams, ka tas prasa uzturēt sākotnējo shēmu (piemēram, kā testa vidi), bet nu puslīdz normāla programmēšanas pieeja to prasa jebkurā gadījumā :)
  5. Ja pareizi saprotu, ka runa ir par db objektu instalāciju, klasifikatoru un konfigurācijas datiem, tad veidojot jaunu db: - db tabulas, indeksi, procedūras, jebkāds cits db objekts - create skripts - dati - insert skripti Taisot patchu: - db objekti - alter, drop, create - dati - update, delete, insert Manā iestādē mēs paralēli uzturam pilnu instalācijas komplektu, t.i., jebkurā brīdī var uztaisīt visu no jauna ar skriptiem, tai skaitā db objektus + sākotnējos kls un konfigurācijas datus. Kopš iepriekšējās versijas izmaiņas kā aprakstīts taisot patchu. Attiecīgi to visu var glabāt jebkurā versiju kontroles rīkā un salīdzināt, analizēt, ko nu katram vajag.
  6. MySQL prezentācijas no Oracle Open World 2013, ja kādam interesē Pieredze liecina, ka tās tur nebūs pieejamas mūžīgi.
  7. Paņem acis pirkstos (pārnestā nozīmē) un paskaties šī foruma šīs sadaļas pirmo tēmu. Gints Plivna http://datubazes.wordpress.com
  8. Es pamēģināju, jo radās interese :) Defaultā jā Access uzrauj pirmo lauku kā PK un autonumber ar to viņa vizuālo brīnumu veidojot jaunu tabulu, bet nekas jau nekavē to PK noraut nost, vai arī izpildīt CREATE TABLE (droši vien, ka tas strādā :). Autoram iesaku beigt cerēt, bet izlasīt kādu grāmatiņu vai pameklēt info inetā un ķerties pie darba pašam. Mamma/Forums Tev visus mājasdarbus nepildīs. Gints Plivna http://datubazes.wordpress.com
  9. Vai tabulā var būt vienādas rindas (ar vienādām vērtībām atbilstošos laukos) Nē Jā, bet ne vairāk kā 2 Jā, bet ne vairāk kā 5 Atkarīgs no lauku skaita Es teiktu, ka neviena atbilde nav pareiza :) Gints Plivna http://datubazes.wordpress.com
  10. Visu vai gandrīz visu var izdarīt SQLā, PHP ir lieks (tas tā fleimam ;) ) Paspēlējos ar MySQL datumu f-jām BTW sākotnējā uzdevumā dati nesaskan ar rezultātu 3 rindiņā, bet tas sīkums. Tātad: mysql> create table t (id int, dep_time time, dep_date date, arr_time time, arr_ date date); Query OK, 0 rows affected (0.03 sec) mysql> insert into t values (1, '18:00', '2012.01.02', '02:42', '2012.01.03'); Query OK, 1 row affected (0.00 sec) mysql> insert into t values (1, '15:00', '2012.01.03', '21:27', '2012.01.03'); Query OK, 1 row affected (0.00 sec) mysql> insert into t values (1, '16:25', '2012.01.04', '16:41', '2012.01.04'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +------+----------+------------+----------+------------+ | id | dep_time | dep_date | arr_time | arr_date | +------+----------+------------+----------+------------+ | 1 | 18:00:00 | 2012-01-02 | 02:42:00 | 2012-01-03 | | 1 | 15:00:00 | 2012-01-03 | 21:27:00 | 2012-01-03 | | 1 | 16:25:00 | 2012-01-04 | 16:41:00 | 2012-01-04 | +------+----------+------------+----------+------------+ mysql> SELECT SUM(HOUR(diff)) + FLOOR(SUM(MINUTE(diff))/60) as h, -> MOD(SUM(MINUTE(diff)),60) as m -> FROM ( -> SELECT timediff( -> date_add(arr_date, INTERVAL arr_time HOUR_SECOND), -> date_add(dep_date, INTERVAL dep_time HOUR_SECOND)) AS diff -> FROM t) AS t1; +------+------+ | h | m | +------+------+ | 15 | 25 | +------+------+ 1 row in set (0.00 sec) Gints Plivna http://datubazes.wordpress.com
  11. Tas parasti (arī šoreiz) nozīmē tieši vienu lietu - rezervētie vārdi: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html Gints Plivna http://datubazes.wordpress.com
  12. Hmm, atceros, ka bija reiz jau tāds jautājums un tajā es rakstīju, kas jādara, lai tā būtu ;) Te nu mēs esam :D BTW es šo to arī esmu uzrakstījis latviski par šo tēmu un daži no rakstiņiem ir 1:1 ar tavām problēmām, kuras te diemžēl ir biezā slānī. http://datubazes.wordpress.com/category/atrdarbiba/ Gints
  13. LEFT JOIN favorite ON (event.id = favorite.event_id AND favorite.user_id = <nepieciešamais lietotāja id>) Gints Plivna http://datubazes.wordpress.com
  14. Iekšējā vaicājumā (subquery), Tev ir 4 kolonas ar nosaukumu width un 4 kolonas ar nosaukumu ID. Attiecīgi virsvaicājumā nav skaidrs kuras no tām summēt, attiecīgi vajag aliasot, lai tās visas nesauktos vienādi. Vēl arī īstas jēgas no tiem ID nav, jo atlasot summu 6 ierakstiem, nav vairs principā skaidrs, kura ieraksta ID tad būs tas ņemamais. Gints Plivna http://datubazes.wordpress.com
  15. Neiet gan, jo vispirms nostrādā grupēšanas f-jas un tikai tad LIMIT klauza. Jāliek apakšvaicājumā: SELECT SUM(a), SUM (b) FROM ( SELECT a, b FROM tabula ORDER BY bla LIMIT 6 ) a; Gints Plivna http://datubazes.wordpress.com
×
×
  • Create New...