Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:258:2088:65...–

peter
MySQL › Více přístupů / zbytečná data?
5. 6. 2014   #190790

Jo, a stranku obvykle dobry programator kesuje do souboru pri editaci. Uzivatel uz si prohlizi staticky soubor, ktery uz ani nejde pres php. Pripadne se to necha jako php, ale kesovani ma zaply server a ten treba uzivateli 15 min bude posilat stale stejnou strenku, ikdyz jsi ji mezitim zmenil.

peter
MySQL › Více přístupů / zbytečná data?
5. 6. 2014   #190789

MS access umi otevrit excel tabulku jako databazi a pak to exportovat, pripadne nad tim pouzivat dotazy. xls a csv se daji stahnout treba ze statistickeho uradu nebo jinych webu, treba gps poloha mes, psc cisla a ulice z posty a pod. Ale jednodussi to bude naplnit programove pomoci lorem isum.

Obvykle jednoduchy dotaz se provede rychleji nez slozity, kdyz ma spravne napsane podminky WHERE nez slozitejsi. UNION by asi nemel byt problem. Nebal bych se pouzit i dva nezavisle dotazy. Na jakpsatweb v diskuzi jsem videl tusim, ze to nekdo testoval, mozna i zname portaly jako root, zive, interval, vrana. Stav byl takovy, ze vysledek byl tak asi stejny. Jen v nekterych db byl rychlejsi slozitejsi dotaz, ale u nich zas dost krachoval casove jednodussi proti jinym db. jakoze treba
db1 dotaz1 10s
db1 dotaz2 32s
db2 dotaz1 15s
db2 dotaz2 13s

peter
MySQL › mysql jedna osoba, viac knih
5. 6. 2014   #190783

Napis z toho program, dej link na kod (asi jako txt soubor) v poznamce mej i create table a pak se da bavit o necem konkretnim, co si muzu u sebe spustit, vytvorit tabulky v db...

peter
MySQL › mysql jedna osoba, viac knih
5. 6. 2014   #190782

Takeshi
http://peter-mlich.wz.cz/…_priklad.txt

CREATE TABLE `user` (
  `iduser`  int(10) unsigned NOT NULL auto_increment,
  `name`    varchar(40) default NULL,
  PRIMARY KEY  (`iduser`),
  INDEX `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

CREATE TABLE `book` (
  `idbook` int(10) unsigned NOT NULL auto_increment,
  `name`   int(10) unsigned default NULL,
  PRIMARY KEY  (`idbook`),
  INDEX `iduser` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

CREATE TABLE `owned` (
  `idowned` int(10) unsigned NOT NULL auto_increment,
  `idbook` int(10) unsigned default NULL,
  `iduser`   int(10) unsigned default NULL,
  PRIMARY KEY  (`idbook`),
  INDEX `iduser` (`iduser`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

INSERT INTO book ... -- nova knizka
INSERT INTO user ... -- novy uzivatel
INSERT INTO owned ... -- knizka1 pujcena uzivateli
INSERT INTO owned ... -- knizka2 pujcena uzivateli
INSERT INTO owned ... -- knizka3 pujcena uzivateli

SELECT a.iduser, a.idbook, b.name, c.name -- vyber knih pujcenych uzivatelem
FROM owned a
LEFT JOIN user b ON b.iduser = a.iduser
LEFT JOIN user c ON c.idbook = a.idbook
WHERE a.iduser=123

peter
MySQL › Více přístupů / zbytečná data?
5. 6. 2014   #190781

jo, 250 radku, kde jsou ty casy :) 2700 mam ted v rozdelane js hre (po odstraneni komentaru stareho kodu zbylo 1600), pulka z toho jsou komenty vyrazeneho kodu, co pujdou pryc.

Z meho pohledu je efektivni to vytahnout jednim dotazem. Nenavrhoval jsem zadny komplikovany dotaz. Vyberes si seznam idecek a k nim pak dohledas prislusne udaje v prvnim pripade pro prvni zaznam, ve druhem pak pro vsechny. Schematicky by se to dalo asi napsat jako
dotaz2 (dotaz1 LIMIT 1) UNION dotaz3 (dotaz1 LIMIT 2,30)
* prvni zavorka je dotaz1 s ORDER BY a vyber prvni polozky
* druha zavorka je opet dotaz1, ale vyber od druhe polozky, 30 radku
* dotaz1 vybere pouze tabulku se seznamem id, takze to ma hned. Kdyz bude uplne stejny podruhe, tak by se to melo samo kesovat, takze ma vysledek bleskove bez prace
* dotaz2 a dotaz3 pak dohleda k vysledkum prislusna data. Ale protoze union vyzaduje stejnu pocet sloupcu, tak je nutne pridat do selectu v dotazu 3 polozku navic jako NULL as text.

No, a kdybys napsal ty sql dotazy, jak to mas ted a funguje ti to, tak by se to dalo resit :) Takhle je to jen par napadu nad necim neurcitym.

peter
MySQL › Více přístupů / zbytečná data?
5. 6. 2014   #190772

jo, v tom druhem dotazu na poslednim radku nema byt LIMIT a mozna by mel byt limit take v tom dotaz1

peter
MySQL › Více přístupů / zbytečná data?
5. 6. 2014   #190771

Chapu to tak, ze mas seznam clanku, ty potrebujes seradit podle nejnovejsiho nahoru a u toho nejnovejsiho potrebujes cely text.
Bud bych pouzil SELECT v SELECTu a UNION a nebo jenom UNION. Zalezi na tom, zda dotazes spravne napsat podminky pro vybrani toho prvniho radku. Ta slozitejsi varianta (misto dotaz1 pak napises cely ten select, mozna to jde i jinak, jednoduseji, ale nejsem moc odbornik):

dotaz1 SELECT COUNT(*) AS n, id FROM clanky WHERE ... ORDER BY ...

SELECT b.id, b.text FROM (dotaz1) a LEFT JOIN clanky b ON a.id=b.id LIMIT 1
UNION
SELECT b.id, NULL AS text FROM (dotaz1) a LEFT JOIN clanky b ON a.id=b.id LIMIT 1
 

google = mysql select cislovani radku

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý