Új hozzászólás Aktív témák
-
-
martonx
veterán
válasz Peter Kiss #951 üzenetére
megelőztél, tökéletesen egyetértek.
A több select használata, és az azokból szerver oldalon eredmény összeidétlenkedése tipikus SQL-ezni nem tudó programozói attitűd. Ezek nem hogy gyorsítanak, de brutálisan lassíthatják az adatfeldolgozást.Én kérek elnézést!
-
Lacces
őstag
Aha, köszönöm a válaszokat. Csak számomra mindig olyan érdekes, hogy rám szólnak, hogy bontsam szét selectre, és ne Joinoljak. Ezért is tettem fel a kérdést, mert ez számomra furcsa volt itt. És néha van egy olyan érzésem, hogy rossz szokásokat vernek belém.
Meg szerintem a Join esetében kevesebb szerver oldali kódot kell írni.
Vannak még itt furcsaságok... külső kulcs használata is ritka, normálfomákkal is alig találkozom.Aham a tranzakció rollback... Most ahogy néztem a folyamatot nekem is ilyen tűnt fel.
NoSQL számomra mindig is érdekes téma volt, mindig minden félét olvasok róluk. Nem sértődtem meg nagyúr . Jahm, most legalább rádöbbentem, hogy mennyi hiányoságom van még ilyen téren. És a saját webes projekteknél jobban össze kell kapnom magam .
-
Speeedfire
nagyúr
válasz Sk8erPeter #954 üzenetére
Bezzeg ha te lennél a munkatársa...
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Sk8erPeter
nagyúr
-
Speeedfire
nagyúr
Úgy néz ki elfelejtek mindent...
Itt ezt nem értem, hogy mi van vele. Amikor az offsetet átállítom 15-re, akkor a 18,19-es id-jú sorok nincsenek ott. Miért?
Illetve más offset értékekkel is igen furcsa dolgokat ad vissza.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
válasz Speeedfire #958 üzenetére
Teljesen jól működik, amennyire látom.
-
PazsitZ
addikt
válasz Speeedfire #958 üzenetére
A LIMIT a leszűrt, kapott adathalmazra vonatkozik.
Így a 11, 12, 13, 18, 19 id-val ellátott sorok, amíg megjelennek LIMIT 10, 50 -nél, addig az említett 5 sor nem LIMIT 15, 50 -nél. Nem értem mi a probléma.Ha 15-ös id feletti sorokat akarsz megkapni, akkor ugye a WHERE-ben kell megadnod, az id >15 feltételt.
Ígyál egy kávét, tolj egy minesweepert és fuss neki újra
(#961) Speeedfire:
A limittel lehet játszani, csak nem azt, amire itt most szerintem gondolsz.
Egyenletes, "szünetmentes" id sor esetén lenne esetileg igaz, amire gondolsz.De ha bővebben kifejted, mi a cél lehet többet tudunk segíteni.
[ Szerkesztve ]
- http://pazsitz.hu -
-
Speeedfire
nagyúr
válasz Peter Kiss #959 üzenetére
A 2. képen miért nem jeleníti meg a 18,19-es id-jú sorokat?
Illetve ha a limit 20, 50 akkor pedig a 25. id-val rendelkező az első nála.Ennyire rövid az agyam, hogy nem jól emlékszem a limitre?
Az első paraméter a kezdő érték, a második pedig, hogy az elsőtől kezdve mennyi rekordot jelenítsem meg. Vagy nem?
PazsitZ: Hát akkor marad a where. Bár nekem tényleg úgy rémlik, hogy a limit-tel is lehet így játszani.[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
válasz Speeedfire #961 üzenetére
Első kép:
Kihagy 10-et;
Látszik: 11, 12, 13, 18, 19 és fölötte;Második:
Kihagy 15-öt;
Látszik: 20 vagy fölötte; (15-10 => 5 darab, ami:11, 12, 13, 18, 19)[ Szerkesztve ]
-
Speeedfire
nagyúr
válasz Peter Kiss #962 üzenetére
Oh, hogy az a. Valóban, most esett le, amit PazsitZ írt, hogy a leszűrt halmaz.
Köszi srácok.
Úgy látszik késő van már nekem...[ Szerkesztve ]
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
syC
addikt
Sziasztok!
Egy kis segitség kellene. Bizotsan hibás a szintaktikám, valaki átnézné?
CREATE TRIGGER teszt_trigger1
after insert ON hirdetesek
FOR EACH ROW BEGIN
IF new.ccm=0 and new.nev like '% _._ %' -- Ha ccm értéke 0 és a nev sztringben van olyan 3 karakteres sztring aminek a 2. karaktere pont
SET @ccm=SUBSTRING(new.nev,LOCATE(new.nev,'.')-1 for 3); --@ccm változóba másold be
IF (IsNumeric(@ccm[0]) and IsNumeric(@ccm[2])) --ha a @ccm változó első és harmadik karaktere szám
INSERT INTO tr_teszt (ccm) VALUES(new.keres_azon,CAST(@ccm as FLOAT)*1000,'0','0'); -- illeszd be a tr_teszt.ccm cellába, floatként ezres szorzóval ( tehát 1.8 -> 1800 )
END IF;
END IF;
END;Köszi
•
-
Sk8erPeter
nagyúr
Hát nem tudom. Sajnos az általad ajánlott Toad for MySQL sem jobb az én tapasztalataim alapján. Nem biztos, hogy a phpMyAdmin okolható az általa tapasztalt probléma miatt (pl. arról nem esett egy szó sem, hogy kipróbálta-e simán, konzolról).
[ Szerkesztve ]
Sk8erPeter
-
http://www.sitepoint.com/dbninja-mysql-client/ - egy próbát talán megér.
-
lakisoft
veterán
válasz Sk8erPeter #967 üzenetére
És mi a helyzet a MySQL Wordbench-el? Nekem ez tökéletesen bevált, eddig.
-
Sk8erPeter
nagyúr
válasz Peter Kiss #968 üzenetére
Köszi az ajánlást, ezt kipróbáltam, és tényleg meglepően gyors! Ráadásul elég modern a felülete (ahogy a cikkben is kiemelik), egész kényelmes és intuitív a kezelése.
Ami engem zavar, és elég gyorsan feltűnt, az első pár perc tesztelgetés után:
1.) táblákra kétszer rákattintva először a struktúráját mutatja, ami még önmagában nem lenne gáz, de magához a tartalmához viszont kénytelen vagyok az SQL Management Studio-hoz hasonlóan rákattintani jobb gombbal, majd Use in Query menüben kiválasztani a Selectet. Pedig tesztelésnél van, hogy inkább azt szeretném megnézni, hogy mi a táblák tartalma, a struktúráját meg alapvetően elég kevésszer módosítom.
2.) amikor az előbb említett Use in Query > Select menüpontot kiválasztom, akkor a hosszú, legörgetett táblalistában felugrik magának az adatbázisnak a nevére, igazából itt a bal oldali hasáb görgetési állapota nem tudom, miért nem tud független lenni a jobb oldalitól, miközben úgyis AJAX-szal töltődik be a tartalom, miért kell, hogy felugorjon a fókusz az adatbázis nevére. Ez nagyon zavaró tud lenni, ha ismét ugyanazon a táblán akarsz valami műveletet végezni, és már megint scrollozhatsz le a listában.
3.) a query-k összepakolásánál hiányolom azt, ami megvan phpMyAdminban: a query összeállításánál felkínált lista a mezők nevével, amire elég csak rákattintani, és bedobja a textarea-ba.Ettől függetlenül elég ígéretes, és tényleg nagyon gyors. De azért sztem a fentiekben még fejlődnie kell, mert elég alapvető igények (nem?).
Egyébként hol tárolja az elmentett dolgait? Nem kér külön adatbázist, táblák beállítását, mint mondjuk a phpMyAdmin. localStorage-ban vagy ilyesmi?============
(#969) lakisoft :
Már elég rég használtam, de a MySQL Wordbench a dbForge Studio for MySQL-hez képest elég sok mindenben elmaradt, sok mindent hiányoltam belőle. Most nincs előttem, nem ugrik be hirtelen, mik voltak ezek, de a query-k összepakolása a dbForge-ban iszonyat kényelmes, míg a MySQL Workbench-ben nem nagy szám, nem lehet olyan szépen összerakni komplexebbeket.
Az is hozzátartozik viszont, hogy a dbForge nem ingyenes.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #972 üzenetére
Most látom, itt az 1-es pontban lévőt félreérthetően írtam, az SQL Management Studio-ban azért annyiból is sokkal jobb a dolog, hogy van lehetőség mondjuk az első 1000 sor listázására, nem kell külön rámenni, hogy na akkor ezt a query-t futtasd. Itt meg úgy működik, hogy ráklattyolsz a Use in Query > Selectre, aztán van egy külön gomb a query futtatására. Idegesítő ez a szükséges plusz felesleges kör.
Sk8erPeter
-
lakisoft
veterán
válasz Sk8erPeter #972 üzenetére
Nyugodtan nézd meg szerintem nagyon sokat fejlődött korábbi verzióihoz képest.
-
Sk8erPeter
nagyúr
válasz lakisoft #974 üzenetére
Na, megnéztem.
Nagyon kíváncsi lennék: szerinted konkrétan miben fejlődött "nagyon sokat"?
Nagyjából semmi különbséget nem láttam ahhoz képest, mint amikor legutóbb próbáltam.
Még új júzert sem lehet hozzáadni, jogait menedzselni, pedig azt még a korábban mutatott, böngészőben kezelhető DBNinjával is lehet, persze nem is beszélve a phpMyAdminról, ahol elég normálisan van ez is megoldva.
Mondjuk az tetszik, hogy ott van a táblákra jobb klikkelve a "Select Rows - Limit 1000", tehát hogy nem kell külön rányomni a query futtatására, mint a DBNinjában, de asszem ez elég alapvető elvárás. Meg a phpMyAdminban azt is be lehet állítani, hogy egy átlagos selectnél defaultból hány rekordot kérdezzen le (tök hülye számokat is be lehet állítani, pl. 37).
A rekordok szerkesztése viszont tényleg kényelmes.
Az is tetszik, ahogy pl. egy UPDATE vagy INSERT query összeállításában segít, hogy mutatja a default értékeket is: http://i.imgur.com/32k8O.png.
De mondjuk elvileg még ez is alapvető elvárás lehet egy ilyen proginál (még ha ingyenes is).
Az is jó, hogy a szintaktikai hibákat egyből jelzi az editorban - ez sem egy hű de nagy valami.
DE ami kifejezetten hiányzik, hogy én nem találtam grafikus alapú query-összeállítót, ami van a dbForge Studio for MySQL-ben - persze utóbbi nyilván többek közt ezért sem ingyenes. Habár most ugrik be, az Microsoft SQL Server 2012 Express-ben található SQL Management Studio is tök ingyenes, mégis tudja ezt... (lehet, hogy most jön a hivatkozási alap, hogy a Microsoftnak több a tőkéje)Ami viszont szerintem alapvető elvárás, az a korábban említett user-létrehozás, meg az, hogy importálni lehessen normálisan a MySQL dumpokat, a tömörített változatokat is (.gz), mint ahogy phpMyAdminban tök egyszerűen lehet is, kb. három klikk. De itt csak olyat találtam, hogy meg lehet nyitni egy .sql-fájlt, és azt le is lehet futtatni (OK, végül is így importálhatom a rekordokat), DE a tömörített állományokat (.gz) már el sem fogadja. Hát ez mi?
Szóval én ezek miatt nem vagyok túlságosan elragadtatva a MySQL Workbench-től, mert a böngészőalapú phpMyAdmin az alapvető, elvárható funkciókból (lásd utóbbi kettő) még mindig többet tud, még ha lassabb is.
[ Szerkesztve ]
Sk8erPeter
-
PazsitZ
addikt
válasz Sk8erPeter #975 üzenetére
user letrehozas, komplett elore konfiguralt jogosultsag szintekkel van. Szerintem korabban is volt.
Tomoritett fajl import nem tudom van-e alapbol, de nem tudom miert akkora gond ez.
A grafikus query osszeallitot meg hagyjuk mar, elhiszen, h lehet vele jot jatszani, de azon tul...[ Szerkesztve ]
- http://pazsitz.hu -
-
lakisoft
veterán
válasz Sk8erPeter #975 üzenetére
Nem azt mondtam rá hogy tökéletes hanem hogy jól használható.
-
Sk8erPeter
nagyúr
"user letrehozas, komplett elore konfiguralt jogosultsag szintekkel van. "
Hol?
Csak gyorsan végigkattintgattam, simán lehet, hogy elkerülte a figyelmemet, de én nem találtam."Tomoritett fajl import nem tudom van-e alapbol, de nem tudom miert akkora gond ez."
Nem értem a kérdést. Hogyhogy miért gond? Ha egy tömörített dumpot akarok importálni, akkor már hogyne lenne gond? Ha phpMyAdminban meg tudták oldani, nem igazán értem, itt miért nem. De már a felvetésedet sem igazán látom be, hogy miért ne lenne gond."A grafikus query osszeallitot meg hagyjuk mar, elhiszen, h lehet vele jot jatszani, de azon tul..."
Azontúl is nagyon hasznos, sokszor jóval gyorsabb, mint kézzel megírni egy rohadt komplex query-t. A gyakorlatban is vettem már hasznát pl. dbForge-nál, amikor tényleg nagyon sok táblát kellett összekapcsolni egy számtalan paramétert, beállítást összekapcsoló query-hez.
Gondolom azért mondod, hogy csak játékra jó, mert nem volt még olyan igény, amire hasznát vehetted volna. Ettől még nem kell ilyen szélsőséges kijelentést tenni, mert számolhatnál azzal is, hogy nincs igazad. Még mindig jobb egy elég jól összepakolt, rohadt nagy query-t átírni pár helyen, mint kézzel, hibákkal lepötyögni a teljeset mindenféle segítség nélkül.
Talán ha kipróbálnád egyszer...(#977) lakisoft : OK.
Sk8erPeter
-
lakisoft
veterán
válasz Sk8erPeter #978 üzenetére
Meg kell írni a hiányosságokat a fejlesztőcsapatnak hátha ráharapnak és megcsinálják.
-
wmati
addikt
Ezzel mit tudok kezdeni ?
SQL-lekérdezés:
CREATE TABLE `members` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 65 ) NOT NULL DEFAULT '',
`password` VARCHAR( 65 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` )
) TYPE = MYISAM AUTO_INCREMENT =2;A MySQL mondta:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM AUTO_INCREMENT=2' at line 6
-
wmati
addikt
picit egyszerűbben elmondanád?
[ Szerkesztve ]
-
PazsitZ
addikt
Jobban megnézve tévedtem. A TYPE helyett ENGINE kell, ez volt a hiba.
Azt meg nem is tudtam, hogy így lehet auto increment-et inicializálni.CREATE TABLE `members` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 65 ) NOT NULL DEFAULT '',
`password` VARCHAR( 65 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` )
) ENGINE = MYISAM AUTO_INCREMENT = 2;[ Szerkesztve ]
- http://pazsitz.hu -
-
MadarasTESCO
csendes tag
szevasztok
kaptam egy feladatot, mert berágott a tanár amiért a csoport f@szbúkozott órán, és ennek én is megszívom a levét. ha nincs kész, vagy legalább valami próbálkozás akkor meghúz engem is mert én is a scoport tagja vok. nem értek sokat az SQL-hez, kb egy-két hete kezdtünk el foglalkozni vele. a feladat az hogy sql paranccsal mySQL-ben ki kell iratni 15000 random generált magyar típusú rendszámot, úgy hogy ne legyen két ugyanolyan. aki tudja a megoldást kérem írja le a parancsot. és magyarázza el mi micsoda. aki nem tudja a kérdésre a választ csak bele akar szólni a dologba, pl hogy miért fb-ztek órán miért nem figyeltek oda, az kérem ezeket tartsa meg magának. holnapra kéne a dolog. pls HELP. előre is köszönöm.
-
lakisoft
veterán
válasz MadarasTESCO #985 üzenetére
Ha valamiben elakadsz és forráskódot kell nézni abban szivesen segítek. De nem oldom meg helyetted a feladatod.
-
Sk8erPeter
nagyúr
válasz MadarasTESCO #985 üzenetére
Most csak rohanva írok, úgyhogy csak részsegítség, de a háromjegyű szám generálása (a magyar rendszám második feléhez) elég egyszerű, lásd [link]:
"To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement:
SELECT FLOOR(7 + (RAND() * 5));
"Szóval például:
SELECT FLOOR(100 + RAND() * (900)) AS szamok
Ezt persze még konkatenálni kéne a háromjegyű, angol ábécéből generált random stringgel, meg a kötőjellel (mármint ezek a szám elé mennek), meg 15 ezer db-ot mindebből ledarálni. Biztos a tanár meg akarta oldani, de nem sikerült neki, ezért rátok bízza a piszkos munkát.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz MadarasTESCO #985 üzenetére
A legprimitívebb, legegyszerűbb megoldás talán ez lehet egy random rendszám kidobálására:
SELECT CONCAT(
CHAR(65+MOD(ROUND(RAND()*100),26)),
CHAR(65+MOD(ROUND(RAND()*100),26)),
CHAR(65+MOD(ROUND(RAND()*100),26)),
'-',
FLOOR(100 + RAND() * (900))
) AS 'rendszam'Sk8erPeter
-
MadarasTESCO
csendes tag
válasz Sk8erPeter #989 üzenetére
kösz, kiagyaltuk már.
-
Sk8erPeter
nagyúr
válasz MadarasTESCO #990 üzenetére
És milyen megoldást választottatok?
Amúgy üzenem a tanárnak, hogy elég rosszak a pedagógiai módszerei. Szerintem ez rohadtul nem kezdőknek való feladat, és messze áll attól, ami a gyakori adatbázis-kezeléshez kell. Ezerszer értelmesebb lenne táblák megtervezésével, összekapcsolásával kapcsolatos feladatot adni...
Nagyon tud irritálni, amikor egy tanár a diákok kedvét még idejekorán elveszi az informatikától.[ Szerkesztve ]
Sk8erPeter
-
laracroft
aktív tag
Sziasztok!
Van egy lekérdezésem, amit bizonyos időközönként le kell futtatnom:
select * from NAPLO where LEIRAS like "%10-es%" and IDO between "2012-11-01" and "2012-11-25"
select * from NAPLO where LEIRAS like "%20-as%" and IDO between "2012-11-01" and "2012-11-25"... és így tovább 100-ig.
Igazából arra vagyok kíváncsi, hogy a megadott időintervallumban hány darab ilyen esemény volt.
Ezt egyenlőre csak 10 különálló lekérdezéssel tudom megoldani.Valahogy egyszerre szeretném lefuttatni a lekérdezést úgy, hogy ehhez hasonló eredményt kapjak:
10-es eset : 500 db
20-as eset: 4002 db
30-as eset: 102 db
...előre is köszi!
-
Apollo17hu
őstag
válasz laracroft #992 üzenetére
Nem tudom leellenőrizni a szintaktikáját, de én így csinálnám (aposztróf kell, nem?):
SELECT t.leiras
,COUNT(*) || ' db'
FROM naplo AS t
WHERE
t.ido BETWEEN '2012-11-01' AND '2012-11-25'
AND t.leiras LIKE '%0-_s%'
GROUP BY t.leirasvagy így, ha 100 felett még menne akár millióig, de azokra nincs szükséged:
SELECT t.leiras
,COUNT(*) || ' db'
FROM naplo AS t
WHERE
t.ido BETWEEN '2012-11-01' AND '2012-11-25'
AND (t.leiras LIKE '%10-es%'
OR t.leiras LIKE '%20-as%'
OR t.leiras LIKE '%30-as%'
OR t.leiras LIKE '%40-es%'
OR t.leiras LIKE '%50-es%'
OR t.leiras LIKE '%60-as%'
OR t.leiras LIKE '%70-es%'
OR t.leiras LIKE '%80-as%'
OR t.leiras LIKE '%90-es%'
OR t.leiras LIKE '%100-as%')
GROUP BY t.leiras -
Sk8erPeter
nagyúr
válasz Apollo17hu #995 üzenetére
"aposztróf kell, nem?"
Alapértelmezésben tök mindegy, ez MySQL.
http://dev.mysql.com/doc/refman/5.0/en/string-literals.html(#992) laracroft :
"egyenlőre" ----> "egyelőre"Sk8erPeter
-
laracroft
aktív tag
válasz Apollo17hu #995 üzenetére
Köszi a válaszokat és a helyesírási tanácsot is
-
laracroft
aktív tag
Sziasztok!
Előre is bocs, ha nem egyértelmű mit szeretnék, de próbálok világosan fogalmazni
Van egy NAPLO táblám, aminek a LEIRAS mezőjében szeretném megszámolni hányszor szerepel ez a 2 szó: Helyszínen és Leellenõrizve.
A ügyfelet egyértelműen az ACCOUNT és a LINE mező azonosítja. Az IDO mező datetime típusú.
1 bejegyzésben csak az egyik szó szerepelhet, de előfordulhat, hogy egymás utáni bejegyzésekben szerepel a 2 szó ugyanannál az ügyfélnél.Feltétel:
Ha mindkét szó szerepel egy ügyfélnél, akkor nézze meg, hogy a két bejegyzés között eltelt idő több-e mint 15 perc.
Ha igen számolja 2-nek,
ha nem -tehát a 2 bejegyzés között kevesebb mint 15 perc van- akkor csak 1-nek.Ezzel próbálkoztam, de syntax error-okba futok
select ACCOUNT, LINE, IDO, LEIRAS
from (
(select ACCOUNT, LINE, IDO, LEIRAS
from NAPLO
where a.LEIRAS like '%Helyszínen%') as a
union
(select ACCOUNT, LINE, IDO, LEIRAS
from NAPLO
where b.LEIRAS like '%Leellenõrizve%') as b
)
where if(a.ACCOUNT = b.ACCOUNT and a.LINE = b.LINE) then timestampdiff(minute, a.IDO, b.IDO) > 15
group by ACCOUNTelőre is köszi!
[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz laracroft #998 üzenetére
Szerintem ezzel van a para:
....
(select ......, LEIRAS
from NAPLO
where a.LEIRAS like '%Helyszínen%') as a
union
(select ...., LEIRAS
from NAPLO
where b.LEIRAS like '%Leellenõrizve%') as b
....az a.LEIRAS és b.LEIRAS mezőkre gondolok, így nem hivatkozhatsz rájuk, mert az alquery-ben nem ismeri a MySQL, hogy mi az az "a" meg mi az a "b".
Az alquery-n, a zárójeles részben belül szerintem nem is kell az alias, vagy ha mégis, akkor jó helyre írd az aliast, például:(select ......, LEIRAS
from NAPLO n1
where n1.LEIRAS like '%Helyszínen%') as aRemélem nagyjából érthető, mire gondolok.
Ja, bocs, most néztem tovább, tényleg, tuti, hogy az IF is szar.
De mondjuk sokat segített volna, ha bemásolod a konkrét hibaüzenetet, hogy mire hivatkozik.
Szerintem CASE-t kéne használnod:
http://dev.mysql.com/doc/refman/5.0/en/case.htmlNa, ha nem sikerül, megnézem normálisabban is, most ennyire tellett.
[ Szerkesztve ]
Sk8erPeter