Nekem ugyanez a problémám a Load data-val. Öszevissza importál, egy oszlopba többet stb. pedig megcsináltam a my.ini fájlban azt amit "Bíborkékhóvirág" írt a karakterkódolásról + mysql monitor indulása után bevittem egy sort hogy tutira figyelembe vegye a config filet: --defaults-file="C:Program FilesMySQLMySQL Server 4.1my.ini (itt nem my.cnf van hanem ini) és semmi hatása nem volt.
Igy néz ki az importálandó file: 4 oszlopos tábla, az első oszlop elsődleges kulcs és auto_increment-es.
Van egy könyvem (Tanuljuk meg a MySQL használatát 24 óra alatt), amely alapján egy kezdő is képes elsajátítani a MySQL használatát, de az abban leírtak - a tapasztaltak alapján - nem működnek, vagy nem úgy, ahogy kellene!
Készítettem egy szöveges fájlt (txt), úgy ahogyan azt a könyv leírta, majd megpróbáltam a konzolon keresztül beolvsani az adatbázisba (LOAD DATA), de amíg a mező értékeit egy ' jellel, vagy egy " jellel voltak elválasztva, addig hibát jelzett, vagy egy mezőbe olvasott be adatokat és kihagyott sorokat. Amikor azonban e jelek használatát elhagytam és az elválasztásra a ; jelet használtam, a beolvasás már sikerült, azonban a konzolban történő lekérdezéskor az ékezetek nem jelentek meg helyesen ... :-(( A folyamatos sikertelenségek nem vették el a kedvem a tanulástól, így jöttem rá az alábbiakra az Interneten történő hosszas keresgélés után: - a my.cnf fájlba be kell írni a [client], a [mysqld] részekhez a default-character-set=utf8 sort és így a szerver utf8 kódolást fog használni; - a konzolba beolvasni kívánt szöveges fájlt (txt) UTF8 kódolással kell kimentenem, ekkor jól olvassa be, bár nem ékezethelyesen jeleníti meg a a beolvasott értékeket a konzol képernyőjén (a phpMyAdminban azonban rendben van az ékezet kezelés); - ennek megoldása, ha a konzolba történő belépés után kiadom a set names CP852 parancsot.
Fel vagyok háborodva, hogy egy könyv azt igéri, hogy előképzettség nélkül képes megtanítani a MySQL használatára, miközben egy szót sem ír arról, hogy leírt példákhoz szükséges a környeteti változók állítása, sőt arról sem, hogy ezt hol és hogyan tehetném meg ... :-(( Én, ezt a könyvet nem ajánlom senkinem sem!!!
Azért lenne két kérdésem: - a phpMyAdminban mit kellene beállítanom, hogy a konzolban jól és helyesen beolvasott fájlom beolvasható legyen (ezekszerint nem azonosan kezeli a beolvasást a konzollal?); - a beolvasás alatt kapott figyelmeztetéseket hol találom meg?
Megpróbáltam a phpMyAdmin alatt a fájlok importját, de ezt kaptam üzenetként ... :-((
HibaEsély van rá, hogy egy hibát találhattál az SQL szintaktikai elemzőben (parser). Vizsgáld meg gondosan a lekérdezésedet, ellenőrizd, hogy az idézőjelek jók és jól illeszkednek. Más lehetséges hiba oka lehet, hogy binárisan töltöttél fel egy fájlt az idézett szövegmezőn kívül. Kipróbálhatod a lekérésedet a MySQL parancssoros felületén. A MySQL szerver hibakimenete alul látható, ha van ott valami, az segíthet felderíteni a hiba okát. Ha még mindig gondjaid vannak, vagy a szintaktiaki elemző (parser) hibát jelez, ahol a parancssoros felületen végrehajtódik, redukáld a problémát okozó SQL lekérdezést egy egyszerű lekérdezéssé, és küldd el egy hibajelzésben (bug report) az alsó Kivágás részben levő adatokkal együtt: ----Kivágás Kezdete---- eNrFjUFOg0AYhfdzirfokpnMP0DFYUUaUknogAy2iTurNSUBRAomddcjeBAXnqHpvaRewuX78t77 4qLICo0FYaGQxkbDhQfyPGbLiZ8Ys+sJzpIXjcN73T31h10v6morun0HItf1oaQMuJxzRdNQS9K+ 94h619xixlZHe59q+EIKn7b8+a1pxrYajrwd2IMtkFkH0TI2pYN1PAk3VYskxo2QLF9FGkoQiUAQ y+/ya8PJ7PVNiTk2iTElSyOz1NiPfBxeecD+bGF4PvUf5+/P4fLTX77C/86/3umCqg== ----Kivágás Vége---- ----Feldolgozatlan Kezdete---- ERROR: C1 C2 LEN: 3 4 144
STR: �
SVN: $Id: sqlparser.lib.php 11335 2008-06-21 14:01:54Z lem9 $
MySQL: 5.0.51b-community-nt
USR OS, AGENT, VER: Win IE 7.0
PMA: 2.11.8.1
PHP VER,OS: 5.2.6 WINNT
LANG: hu-utf-8
SQL: ;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;;;Árvíztűrő;----Feldolgozatlan Vége----
SQL-kérés:
;;Árvíztűrő;
MySQL jelzi:
#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 'Ã
A MySQL my.cnf fájljában a [client] és [mysqld] értékekhez beírtam a default-character-set=utf8 sort és így aha a txt fájlt utf8 karakterkiosztással mentem le, majd ebből beolvasok az adatbázisba, akkor a phpMyAdmin mutatja is az ékezeteket, de a mysql parancssori felületén kiadott lekérdezésekben nem jelennek meg az ékezetek, sőt nem minden adatot tud kiolvasni a beolvasottak közül ... :-((
Ha a phpMyAdminon keresztül adom be egyesével az adatokat (akár ékezetesen is), azzal semmilyen gond nincs!
Van erre valami megoldás?
Szükséges az, hogy a lementett txt fájl utf kódolsú legyen, vagy ezt önállóan is tudnia kellene (tehát ANSI kódolás esetén automatikusan felismerné és helyesen jelenítené meg az ékezeteket, mind a phpMyAdminban, mind pedig MySQL parancsfelületén)?
Azt szeretném megkérdezni, hogy mi a megoldás arra, ha egy txt-ből szeretnék adatokat beolvasni az adatbázisba konzolon keresztül, de az ékezeteket nem tudja jól értelmezni ... :-(
$eredmeny=mysql_query("select * from tippelo.varolista where ar<23", $kapcsolat) $sorok_szama=mysql_num_rows($eredmeny);
Eddig működik, az eredmény megjelenítése is, de miért nem lehet ár szerint rendezve? Mert ha beleírom a mysql_query-be a "select *" után az "order by ar"-t, akkor hibaüzenetet ad:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/ultraweb/t/ti/tippelo/pelda.php on line 9
A vásárlás adminisztrálása pedig már szerintem eléggé részletkérdés a feladat megoldása szempontjából, ugyanis azt már nem kell semmilyen feltételhez kötni, az mehet bele a másik "teljesült" nevű táblába.
Tehát kell bele egy ciklus ... persze ezt én is tudtam.
Tehát lockolni kell a recordot, ami az egyidejűség miatt a legnehezebb.
Vagy éppen arra az időre kimentem egy változóba a rekordot, és törlöm azt a sort,
majd amikor elvégeztem rajta a műveletet, akkor visszaírom a táblába.
Ez megoldás lehet.
Az egyidejű használatnál csak annyi lenne a probléma, hogy negatív lehet az érték? Vagy technikailag nem megoldott az egyidejű írás, eltekintve attól, hogy az esetemben a kínálat negatív lehet? Ez utóbbi esetben ugyanis nem sok létjogosultsága lenne az én szempontomból az adatbázisnak a sima php-s fájlkezeléssel szemben.
Szerencsére nincs megrendelő, illetve a megrendelő én vagyok, és magamtól rendelem meg a weboldalt, úgy vitelezem ki, ahogy nekem tetszik, csak szeretnék egy tisztább megoldást, mint a következő módszert:
megnyitom a fájlt,
lockolom a fájlt,
ha eközben újabb kérés érkezik, akkor létrehozok egy ideiglenes fájlt, majd amikor felszabadul az első fájl a lockolás alól, akkor hozzáírom, ha éppen egy másik kérés/folyamat nem használja a két fájl közül valamelyiket, mert ha véletlenül használja, akkor létrehozok egy harmadik ideiglenes fájlt stb ... és eközben egyre több fájlt kell átnézni amikor egy újabb kérés érkezik.
Ja, a "goto UJRA" felesleges, viszont kimaradt a COMMIT... Mindegy, igazából úgyis kurzorral, meg tranzakcióval meg ilyen misztériumokkal kellene megcsinálni;)
Nem ahhoz kell a két hét, hanem ahhoz, hogy ezeket megtanuld. Mert hiába dobod össze PHP-ban, ha a megrendelő azt kéri, hogy PHP és MySQL legyen, akkor szóba se áll veled.
Meg nem összedobni kell, hanem megcsinálni. Ezért mondtam, hogy a "modell bírálatától" eltekintek.
A hártány viszont hátrány. Egyébként is a programozó munkájának 90%-a abból áll, hogy az esetek 1%-ában előforduló eseteket lekezelje.
INSERT INTO ajánlat eladó_id,ár,mennyiség VALUES (eladó1,ár1,mennyiség1);
Ez annyiszor, ahány féle ajánlat van.
Most bejön a vevő és szeretne ár_max-on mennyiség_max-ot vásárolni.
SELECT elado_id,ár,mennyiség FROM ajánlat WHERE ár<=ár_max AND NOT (mennyiség=0) ORDER BY ár ASC, mennyiség DESC;
Erre kapsz egy táblát, amiben az árajánlatok vannak az ár növekvő sorrendjében. Azon belül azonos áron a nagyobb mennyiség van elöbb, hogy kevesebb helyre kelljen menni.
Ezen a táblán kell végigmenni egy ciklussal és vásárolni, amíg megvan a szükséges mennyiség.
A vásárlás adminisztrálása, ha mennyiség_x lesz a megvett mennyiség elado_x-től.
UPDATE ajánlat SET mennyiség =(mennyiség-mennyiség_x) WHERE eladó_id=eladó_x;
DELETE FROM ajanlat WHERE mennyiség=0;
(A rekord törlése, ha a mennyiség nullára menne le.)
Az UPDATE idejére a rekordot vagy lockolni kell, vagy egy triggert kell tenni a táblára, hogy ne mehessen negatívba a mennyiség. Itt kell kezelni az egyidejűséget, de ez lesz a legnehezebb.
Szerintem ehhez nem kell két hét ráfordítás. PHP-ben tíz perc alatt összedobom. Egyetlen hátránya, hogy nem tud egyszerre több vásárlói igényt kielégíteni.
Adott a Mező1 és Mező2 felhasználótól érkező adat.
Azt szeretném, hogy keresse meg azt a rekordot, ahol a Szám1 mező értéke a legnagyobb, és ebből vonja ki MIN(Mező2,Szám2)-t, ha ezáltal Szám2 értéke 0 lesz, akkor azt a rekordot törölje a táblából. Ha Mező2 még nem 0, akkor addig keresse a legnagyobb Szám1 értéket, amíg Mező2 értéke 0 lesz, vagy pedig Szám1<Mező1.
Emberi nyelvre lefordítva, a piacon 50 helyen árulnak tojást, 21-26 Ft közötti áron, és a vevő csak max. 23 Ft-ot hajlandó érte adni, de kell neki 1200 db, ha meg tudja venni az 1200 db tojást max. 23Ft-ért, de lehetőleg a legolcsóbban (elsősorban 21-ért, majd 22-ért és 23-ért), akkor hazamegy, a megfelelő árusok tojás mennyiségét pedig csökkentjük, ha nem tudja megvenni, akkor hazamegy x db tojás-hiánnyal (vagy kiáll a bejárathoz egy táblával: "Tojást vennék max. 23 Ft-ért"), az az árus, aki viszont eladta a tojásokat, az hazamegy a piacról.
Várólistát talán úgy lehetne, hogy felveszünk két mezőt, az egyik a prioritás (gyk: protekció), a másik a bekerülési dátum, azután amikor a soronkövetkezőt kell kiválasztani, akkor SELECT ... ORDER BY prioritas DESC, bekerules ASC;
Én azt tanácsolnám, hogy ruházz be elöbb egy könyvbe. MySql irodalom van magyar nyelven is, angol meg korlátlanul lopható a neten. Magyarul is vannak jól letölthető anyagok. Pl. a hivatalos dokumentáció PDF-ben.
Adatbáziskezelésről alapból el kellene olvasni Halassy könyvét.
Erre rá lehet áldozni 2 hetet. Szerintem megéri, mert utána legalább kérdezni tudsz.
Csak illusztrációképpen:
1. Modern adatbáziskezelőkben már nem "rendezik" a táblát. A lekérdezésnek van rendezettsége.
2. Ennélfogva nincs olyan hogy "beszúr". (Ugyan INSERT-nek hívják az utasítást, de az nem a rendezettség szerint teszi be a táblába az adatot.)
3. Ha egy beszúrás elött for ciklus kell, akkor nagyon nagy valószinüséggel rosszul van megtervezve az adatmodell.
Lenne egy feladat, amit meg kéne oldanom, MySQL-ből nagyon 0-n vagyok és az agyam sem vág olyan jól, mint régen. Van némi programozói gyakorlatom php és pascal nyelvekből. Az adatbáziskezelés azonban kimaradt az életemből.
Szóval, van egy (vagy több) tábla egy MySQL adatbázisban. Mondjuk "varolista" néven. Három oszlopa van az egyszerűség kedvéért: Id, Szám1 (float), Szám2 (float). Sorba kéne rendezni a táblát mondjuk Szám1 szerint csökkenő sorrendbe.
Jön egy felhasználótól egy jól kitöltött űrlap, mondjuk Mező1 és Mező2 adatokkal, amit bizonyos szempontok alapján a tábla mezőivel össze kéne hasonlítani (ciklussal végigmenni rajta) és megadott feltételek szerint módosítani a tábla mezőit, valamint az űrlap adatait, majd az űrlapról kapott adatokat (amik közben módosultak), beszúrni a táblába. Ennek az egész "eljárásnak" le kéne futnia úgy, hogy eközben egy másik felhasználótól érkezett űrlap feldolgozása csak ezután történjen.
Ez MySQL-en belül megoldható vagy csak PHP+MySQL együtt tudja megcsinálni. Pl. MySQL tábla rendezése megy MySQL-en belül? Hol lehet leírást találni a MySQL-en belül használható parancsokról lehetőleg magyarul?
HA Mező2>0, AKKOR BESZÚR varolista ÉRTÉKEK (Mező1, Mező2)
DELETE FROM varolista WHERE Szám2=0
(Mező1, Mező2-t az űrlapról kapja, nem tudom, hogy kerül ide változóként, de esetleg eleve beszúrom a végére, és akkor táblán belül tudok rá hivatkozni ... gondolom. De ez csak az én elképzelésem. )
Majd mikor ez megvan, akkor azt kéne csinálni, hogy azokat a sorokat, amelyeknél a Szám1 megegyezik, azokat összegezni, majd azt megjeleníteni a kliens gépen.
Ezt én php+fájlkezeléssel oldottam meg eddig, de az nem áll meg, ha egyszerre többen akarják használni. Bonyolult legalábbis, fájl lockolása, ha lockolva van, akkor másik átmeneti fájlba írjon, aztán fűzze össze a két fájlot. Körülményes.
Van erre a MySQL-nek valami saját belső megoldása, hogy a kéréseket tárolja majd futtatja akkor, ha éppen szabad lesz?
Ja és ezt az egész műveletet másodpercenként akár 10-100-szor kéne végrehajtani.
Olyan kérdésem lenne, hogy hogyan tudom azt megcsinálni, hogy van egy MySql5-ös Db-m és van pár táblám egy database-ben, amit másik számítógépen szeretnék használni(házi bemutatásáról lenne szó és valahogy el szeretném vinni a suliba az adatbázisom a táblákkal és azon tartalmukkal együtt). Ezt hogyan tudnám megcsinálni?
MySQL kapcsolatot jelszó helyett - az SSH -hoz hasonlóan - csak SSL kulcsokkal szeretnék védeni. Userenként, úgy, hogy csak a CA, és a user kulcs egyezése esetén lehesen belépni.
Hogyan lehet ezt megvalósítani?
Az 5.0-ás MySQL -ben megnéztem a mysql.user tábát, és a Requireban csak a Subject, az Issuer, és a Cipher értékek adhatók meg. A táblában ezek ráadásul sima text formában vannak tárolva, nem pl. valamilyen hash -al.
Nem látom be, hogy ugyanazok az infók, amik benn vannak a crt -kben is, bármiféle védelmet eredményeznek.
A szerver oldalon tárolt user crt -re viszont nem találok példát.
Tehát a jelszó nélküli kapcsolat védelme SSL -el mindössze abból áll, hogy a szerver és a kliens kulcsokat ugyanaz a CA írta alá?