Az alabbi txt fajlban ([link])
talalhato egy 3 tablas adatbazis.
Lent talalhato 3 lekerdezes, melyek ugyanazt az eredmenyt adjak. Az lenne a kerdesem, hogy melyik gyorsabb, jobb, hatekonyabb stb.?
(eletszerubb adatok nem jutottak eszembe )
[Szerkesztve]
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [koxx:] Bloons TD5 - Tower Defense játék
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [bitpork:] Fogyasztásra ítélve
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] Android másképp: Lineage OS és társai
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Hozzászólások
Protezis
őstag
Jester01
veterán
Ránézésre az IN-es verziót nem használnám. A másik kettő meg ekvivalens.
Jester
Protezis
őstag
Jobb megoldas nincs?
Jester01
veterán
Én legalábbis nem tudok. Megfelelő indexeket rá és kész.
Jester
Protezis
őstag
koszonom
Forest_roby
őstag
Most hirtelenjében szívinfarktust kaptam, olyan hibát vettem észre.
Ez, hogy - hogy működik:
mysql> select loginName, user_id from users where loginName='bUCO';
+-----------+---------+
| loginName | user_id |
+-----------+---------+
| Buco | 3 |
+-----------+---------+
1 row in set (0.00 sec)
mysql>
Miért érzéketlen a kis és nagybetűkre az adatbázisom?
És hogy lehet ezt a problémát megoldani?
Vagy ennek a select -nek így kell működnie?
Előre is köszi!
Forest
-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
tkazmer
addikt
Ez a szerver verziójától függ. Nekem a saját szerveremen szintén nem tesz különbséget a kis és nagybetűk között, ellenben az extra.hu-n már megkülönbözteti őket.
úgy tervezték, hogy kibirjon egy atomtámadást is. De nekünk komolyabb fegyvereink vannak, mint pl Béla bá, a földmunkagépkezelő
Forest_roby
őstag
épp most néztem utánna.
minden mysql így műxik asszem jól, de ha varchar binary -két tárolom el a case sensitive adatokat, akkor működni fog!!!
Mindenesetre köszi a választ!
-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
(#359) Forest_roby válasza Forest_roby (#358) üzenetére
Forest_roby
őstag
vagy varbinary pontosabban! és műxik is!!
mysql> select loginName, user_id from users where loginName='bUCO';
Empty set (0.00 sec)
mysql> select loginName, user_id from users where loginName='Buco';
+-----------+---------+
| loginName | user_id |
+-----------+---------+
| Buco | 3 |
+-----------+---------+
1 row in set (0.00 sec)
mysql>
-=Legyél Laza!=- __ ''Have you tried turning it off and on again?'' __ ''Is it definitely plugged in?'' /o\ :D:D
VladimirR
nagyúr
probalok adatbazisba helyezni egy csunya string-et az adatbazishoz
a string azert csunya, mert a sha1( "idejonvalami", true ); fuggveny eredmenye, vagyis mindenfele karakterek vannak benne
a gond az, hogy nem akar sikerulni, nem azt teszi be, amit kellene
a problema abban leledzik, hogy az adatbazis utf8-as es en ennek megfeleloen az adatbazis-kapcsolat letrehozasa utan beallitom a character set es a names valtozokat utf8-ra
mysql_query( "SET CHARACTER SET utf8;" );
mysql_query( "SET NAMES utf8;" );
ha viszont ezt nem tesz meg, akkor a fentebb kifogasolt problema megszunik, a karaktersor megfeleloen kerul az adatbazisba
ekkor eppen csak az ekezetes karaktereim nem tudnak madukkal mit kezdeni
van erre valami megoldas azon kivul, hogy 20 helyett 40 byte-on tarolom az sha1 hash-eket?
Lortech
addikt
Korán van még, lehet ezért nem világos.
Egy hash esetén miért kéne hogy átkódold, és helyesen jelenjeg meg az adatbázisban, vagy bármi átalakítást végezz rajta? Ezesetben szvsz az a legjobb, ha nem csinálsz vele semmit, úgy rakod az adatbázisba, ahogy legeneráltad, így kivételkor sem kell odafigyelni, hogy visszaalakítsd, mert (gondolom későbbi összehasonlítás céljából tárolod el a hasht) az összehasonlítandó hash is ebben a kódolásban van.
Thank you to god for making me an atheist
VladimirR
nagyúr
az minden kapcsolodaskor megtortenik, keres nelkul (az adatbazist kezelo osztaly csinalja)
VladimirR
nagyúr
ehh, naszoval tenyleg koran van meg
szoval az a gond, hogy ha egy lekerdezesben akarok adatbazisba illeszteni egy usernevet es egy jelszohoz tartozo binaris sha1 hash-t, akkor az egyik nem fog latszani, attol fuggoen, hogy a kapcsolategyeztetes be van-e allitva utf8-ra
Benmartin
senior tag
Úgy nem jó, ha a MySQL végzi el a kódolást? [link]
VladimirR
nagyúr
nem, mert eppen azt szeretnem elerni, hogy ne igy, 40 karakter hosszan, hanem mindossze 20 byte-on tortenjen a tarolas (Bovebben: [link]
Jester01
veterán
A mező collation legyen BINARY. Ha ez még mindig nem elég, akkor add be hexában.
mysql> create table t(hash char(20) BINARY);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t values (0xC3A9);
Query OK, 1 row affected (0.00 sec)
mysql> select hex(hash) from t;
+-----------+
| hex(hash) |
+-----------+
| C3A9 |
+-----------+
1 row in set (0.00 sec)
Jester
zeix
senior tag
Érdeklődnék, hogy hogyan tudnám kiszűrni a duplán szereplő adatokat egy adatbázisban?
Előre is köszönöm.
Jester01
veterán
Kiszűrni = lekérdezni?
SELECT f1, f2, ... FROM t GROUP BY f1, f2, ... HAVING COUNT(*) > 1
ahol f1, f2, ... az egyediséget jellemző mezők, t értelemszerűen a tábla neve.
Jester
zeix
senior tag
Köszönöm!
Nagyon 1szerű volt! Azt hittem bonyolultabb lesz...
[Szerkesztve]
garfield-r
tag
Üdv mindenkinek!
Lenne egy nem szokványos kérdésem: hol találhatok értelmes, magyar nyelvű anyagot ehhez a témához: SQL Server Client Network Utility Mert most töltöm a szakmai gyakorlatomat egy programozó cégnél és itt ezt a témát adták ki nekem, h írjak róla jópár oldalt, amit majd le kell adnom a fősulimon....
Na szóval a nagy gondom az h magyarul se nagyon tudom h pontosan mit takar a cím + a Microsoft oldalát már végignztem és ott nem találtam semmit ami jó lehet első ránézésre mert ott az SQL Server 2000, 2005 és 2008-at ismerttették ezerrel...
vancha2
aktív tag
Lenne 2 kérdésem:
1. Van egy adattáblám ebben 3 mező: id, link, letoltve.
Hogy tudom ebből például a 2. rekordnak a letöltve mezőben levő értékét lekérdezni, és kiírni php-val? (az id alapján)
2. Hogy tudok php-ból ennek az értékéhez hozzáadni egyet?
Előre is köszönöm a segítséget
vancha2
aktív tag
Csak tudja valaki a választ!
alitak
senior tag
$DB = mysql_query(''select letoltve from tabla where id=2'');
$a = mysql_fetch_row($db);
echo $a[0];
$par = ''update tabla set letoltve=letoltve+1'';
mysql_query($par);
Nec arte, nec marte | használt hardverek jó áron: http://goo.gl/lUwLkw
vancha2
aktív tag
Köszi ez így tök jól működik!
Viszont van még valami, amit nem tudok: van egy űrlapom, abban egy szöveges mező, amink a neve email. Ezt küldöm át a php fájlnak, és amit a szöveges mezőbe írnak email címet, azt fölveszi az adatbázisomba. A táblámban van egy id és egy email nevű mező. Ezt sikerült összehoznom, de nem működik:
$email = $_POST['email'];
$parnacs = ''insert into tabla (email) values ('$email')'';
mysql_query($parancs);
Mi benne a hiba?
[Szerkesztve]
cucka
addikt
az első sorban elírtad a változó nevét ($parnacs) :)
egyébként szerintem ez jónak tűnik (leszámítva persze azt, hogy nincs levédve az, amit az adatbázisba insert-elsz). ha mégsem működik, első körben irasd ki az sql query-det, onnan látni fogod, mi a gond.
esetleg az okozhat még gondot, ha mondjuk a tábládban az id oszlop not null-ra van állítva és nem auto increment-es, akkor elvileg mysql hibát kell kapjál. ennek kiderítésére (és úgy általában az sql hibák feltárására a következő módon érdemes query-ket futtatni:
mysql_query($parancs) or die (mysql_error());
Lortech
addikt
parnacs - parancs ? Bár ezt valószínűleg csak most írtad el.
Hibaüzenet volt? Vagy csak nem csinálta amit kell?
A kód működőképes, de megfelelő működéshez a környezetnek (főleg adatbázisnak) passzolnia kell. echo mysql_error(); dob valamit?
$email változót írasd ki, hogy átjött-e.
Ja még az előzőben az updatehez kell egy where id = x, mert így minden sor letoltve mezőjéhez hozzáad egyet.
szerk: Lassú voltam.
[Szerkesztve]
Thank you to god for making me an atheist
vancha2
aktív tag
Én is észrevettem, hogy akkor minden sorhoz hozzáad egyet, de sikerült magamtól is kiegészíteni.
Az első alkalommal működik az űrlap, jól fölveszi az adatbázisba, de második alkalommal már ezt a hibaüzenetet kapom:
mysql_query(): MySQL error: Duplicate entry '0' for key 1 in /nfs/extra/v/vc/vcsabi/wwwroot/proba/hirlevel.php: mysql_query on line 61
in /nfs/extra/prepend/prepend.php(187) : system created function on line 32
Ez most mit jelent? Még egy rekordot akar felvenni ugyanazzal az id-val minta ami az előzőnek van?
Louloudaki
aktív tag
[Szerkesztve]
Lortech
addikt
Én is észrevettem, hogy akkor minden sorhoz hozzáad egyet, de sikerült magamtól is kiegészíteni.
Jól van na, zsenikém.
Igen, épp erre írtam, hogy a kód jó, csak a z adatbázis háttérnek is passzolnia kéne.
Mivel insertnél csak az email mezőt adod meg, ezért az id automatikusan 0-t kap, az íródik be, viszont id-nél vsz megkövetelted az egyediséget, kulcsnak állítottad be, ezért második alkalommal már nem engedi hogy 0-t tegyél bele, mivel akkor két 0 id-s sor lenne. Ezért kéne auto_increment tulajdonságot megadni az id mezőre. Így ''insert into tabla (email) values ('$email')''; parancsnél az id automatikusan a következő értéket veszi fel, és nem lesz duplikáció.
Thank you to god for making me an atheist
vancha2
aktív tag
Az auto_increment tulajdonságot hol tudom beállítani?
Lortech
addikt
Paranccsal: ALTER TABLE `tabla` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT
ahol tabla a tabla neve, id a mező neve, int a típusa.
Vagy phpmyadminban grafikusan is.
[Szerkesztve]
Thank you to god for making me an atheist
Louloudaki
aktív tag
1. amikor létrehozod a a táblát, adatbázis adminisztrátorban bejelölöd. pl phpmyadminban az extra alatt van legördülőben.
2. utólag jelölöd be (szintén phpmyadmin pl: ceruza a kívánt oszlopnál, és extra alatt ugyanúgy kiválaszt)
3. ha nem használsz adminisztrátor progit:
- tábla létrehozása
CREATE TABLE `x` (
`id` TINYINT( 1 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`x` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM ;
- tábla módosítása
ALTER TABLE `x` ADD PRIMARY KEY(`id`);
(#383) Louloudaki válasza Louloudaki (#382) üzenetére
Louloudaki
aktív tag
utsó sor mod:
ALTER TABLE `x` CHANGE `id` `id` TINYINT( 1) UNSIGNED NOT NULL AUTO_INCREMENT
[Szerkesztve]
vancha2
aktív tag
Köszi a segítséget neked és Lortech-nek is, így már működik.
Még egy utolsó kérdés: hogy tudom azt leellenőrizni, hogy a beírt email címet tartalmazza-e az adatbázis, mert ha igen akkor nem venném fel mégegyszer.
shev7
veterán
peldaul egyedive teszed azt az oszlopot is, es ha duplan menne be, akkor elkapod az exception-t
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Louloudaki
aktív tag
mielőtt beszúrod, csinálsz egy lekérdezést, hogy
$result=mysql_query(''select id where email=' ''.$_POST[ 'email' ].'' ' ); és
if(mysql_num_rows($result)) { kiírod, hogy van ilyen }
else { beszúrás }
// shev, egyedivé tenni hogy tudok egy oszlopot?
[Szerkesztve]
shev7
veterán
ha primary key vagy unique
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
Louloudaki
aktív tag
aha, unique, ez az, köszi.
vancha2
aktív tag
THX
Protezis
őstag
Adatbazisban tarolt felhasznalok egymasnak uzeneteket kuldhetnek. Ezeket az uzeneteket ugyancsak adatbazisban tarolom.
A kovetkezo problemaba botlottam: ha egy felhasznalo ki szeretne torolni egy korabban altala elkuldott uzenetet, azt nem torolheti az adatbazisbol, ugyanis akkor a cimzett se olvashatna el tobbe azt az uzenetet. Persze forditva is hasonlo a helyzet.
2 megoldas jutott eszembe:
a) 2 tablat hasznalok. Egyet az elkuldott uzenetekhez, egyet a fogadott uzenetekhez. Ez sajnos nagyfoku redundanciat jelent, ugyanis minden uzenet 2-szer van tarolva, de egyszeru a torles megvalositasa.
b) 2 mezot hasznalok annak tarolasara, hogy a kuldo, illetve a fogado torolte -e a levelet. Ekkor minden torlesnel ellenoriznem kell, torolte -e mar a masik fel korabban a levelet. Ha igen, akkor tenyleg torolhetem a bejegyzest, ha nem, akkor a megfelelo mezoben toroltre allitom a levelet.
Bar a b) verziot tartom jobb otletnek, kivancsi vagyok ti mit gondoltok. Ha van mas otletetek, azt is szivesen veszem.
cucka
addikt
első változat nem jó, mert nagyon sok fölösleges adatot tárolsz.
második nem jó, mert kizárod a lehetőségét az esetleges több címzettes levélnek
szerintem a harmadik, középutas megoldás a jó:
van egy kapcsoló táblád a levél, a küldő és a fogadó között, amiben a köv mezők vannak:
kuldo_id, fogado_id, level_id, megnezett, torolt.
első három külső kulcs és a megfelelő táblában mutat egy sorra, utolsó kettő flag.
ehhez kell egy levél tábla, ahol a levelek szövege/tárgya/stb. található, mindegyik levél egyszer. ez a legrugalmasabb megoldás, mert támogatja a sok címzettes üzenetküldést, mindenkinek tudsz készíteni sok funkcióval rendelkező postaládát a kapcsoló tábla bővítésével (pl. ilyeneket hogy mikor nézte meg a levelet, kukába rakta-e vagy törölte, stb.) ugyanakkor minimálisra csökkenti a redundanciát.
Protezis
őstag
Igazad van! Koszonom, tenyleg ez a megoldas.
Protezis
őstag
De ebben az esetben is el kell tarolnom a kapcsolotablaban, hogy a felado torolte -e, illetve a cimzett torolte -e. Teljesen hasonloan a megnezett mezobol is ketto kell - bar ez talan felesleges, a felado ugyis megnezte.
(Ugyanis mind a kuldott, mind a fogadott uzeneteket meg akarom jeleniteni egy adott felhasznalonal.)
Jol gondolom, vagy valamit benezek?
[Szerkesztve]
föccer
nagyúr
Üdv.
Lenne 2 kérdésem.
1: hogyan tudok csak olvasási jogokkal rendelkező felhasználót létrehozni (gondolok itt a select-re). Itt:
[link] próbáltam utánna nézni, csak nem nagyon tudtam kihámozni, hogy nekem mire van szükségem
2: Egy adatbázisból lekérdezek néhány infót. Egyesével töltögetem ki a szükséges táblázatot, viszont az adatbázisból vett adatok nem azok, ami nekem kell, hanem valami visszatérési érték. Ez miért van, illetve hogyan lehetne tenni ellene
Neve: Resource id #8
Irányítószáma: Resource id #9
Lakhelye: Resource id #10
Címe: Resource id #11
E-mail címe: Resource id #12
Telefonszáma: Resource id #13
Az Terméket fogyasztja: Resource id #14
Sikere: Resource id #15
Kód, amivel kiiratom:
print(''<table border=\''1\''>\n'');
$sql = ''select NEV from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Neve:</td><td>$eredmeny</td>'');
$sql = ''select IRSZAM from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Irányítószáma:</td><td>$eredmeny</td>'');
$sql = ''select TELEPULES from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Lakhelye:</td><td>$eredmeny</td>'');
$sql = ''select CIM from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Címe:</td><td>$eredmeny</td>'');
$sql = ''select EMAIL from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>E-mail címe:</td><td>$eredmeny</td>'');
$sql = ''select FELEFON from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Telefonszáma:</td><td>$eredmeny</td>'');
$sql = ''select FOGYASZTJA from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Az Terméket fogyasztja:</td><td>$eredmeny</td>'');
$sql = ''select SIKER from distributorok where ID = $_GET[id]'';
$eredmeny = mysql_query($sql, $sql_csatlakozas) or
die (print(''Nem sikerült a műveletet végrehajtani. A hiba oka: ''.mysql_error()));
print(''<tr><td>Sikere:</td><td>$eredmeny</td>'');
print (''</tr>'');
print(''</table>\n'');
Köszöm a segítséget
Építésztechnikus. Építőmérnök.
cucka
addikt
a kapcsolótáblában eltárolhatod, hogy pl. berakta-e a kukába a levelet a júzer. amikor véglegesen törlődik, akkor meg törölheted azt a sort a kapcsolótáblából. ezen kívül törlésnél célszerű ellenőrizni, hogy az éppen törölt levélre hivatkozik-e még valamelyik sor a kapcsoló táblából, mert ha nem, akkor törölhető az is.
Protezis
őstag
Igen, azt hiszem egyre gondolunk.
Idokozben megegy problema:
uzenet tabla: id, szoveg, datum
felhasznalo_uzenet tabla: id, kuldo_id, cimzett_id, uzenet_id stb.
Uzenet kuldesekor letrejon egy bejegyzes az uzenet tablaban. Az uzenet.id auto_increment. Ezutan a felhasznalo_uzenet tablaban el kell tarolnom, hogy ki, kinek kuldte az adott uzenetet. Ehhez pedig szuksegem van az elobb eltarolt uzenet id-jere. Ezt hogy kaphatom meg? (nem szeretnek buveszkedni, mint pl. utolso uzenet id-je // lehet azt mar mas irta)
[Szerkesztve]
Protezis
őstag
A mysql_query() fuggveny egy eroforrassal ter vissza.
Erre meg ra kell ereszteni pl. egy mysql_fetch_assoc() fuggvenyt. Elso pelda eleg beszedes: [link]
Protezis
őstag
Talaltam ilyet:
php: mysql_insert_id() (a kovetkezot valositja meg: )
mysql: LAST_INSERT_ID()
Ha az uzenet mentese, es a LAST_INSERT_ID() hivasa kozben meg egy uzenet lementodik, akkor az a tippem, hogy rosszul fog mukodni a dolog. Tranzakciot kellene hasznalnom?
tzs84
tag
last insert id az aktuális kapcsolatra vonatkozik
tehát nem lesz gáz ha másik szál beszúr egyet
ha MAX()-al kérdeznéd akkor lehetne
meone
tag
Sziasztok lenne egy nagyon alap kérdésem.
Feltetem az easyphp AMP csomagot és nincs meg adava benne a mysql-hez root jelszó és felhasználónév a config fájl ban, és ezt szretném meg kérdezni hogy mit kell be írni bele, hogy tudjam normálisan használni mert addig nem tudok semmi féle mysqlconetet végrehajtani.
Tudod hogy alap kérdés de a beállítás hoz nem nagyon értek és elrontani meg nem nagyon akarom. Köszi előre is.
Elnézést kérek mindenkitől a helyes írásom ért :)