Tegnap telepítettem az Apache 2.2.-t, meg a PHP 5.3.2.-t sikeresen.
A Mysql 5-tel viszont meggyűlt a bajom.
A weblabor utasításait követtem amennyire lehetett (ugyanis 2004-es a bejegyzés), és a szerver fut ugyan, de a mysql administration kifogott rajtam.
Miután rootként bejelentkeztem, létre akartam hozni egy usert, hogy jogokat adjak neki, de nem sikerül. A végén ilyen hibaüzit dob ki:
Error while storing the user information. The user might have been deleted. Please refresh the user list. És emellé még egy dos ablak is felugrik, amiben egy üzenet van, aztán villog kurzor, de beírni emmit nem enged, viszont itt is van egy üzenet: Message: save user: can't retrieve user information.
A félig-meddig létrehozot usert törölni nem tudom, és innentől meg vagyok lőve. Nem tudom, mit kéne tennem...
"Te ezek az adatokat vszleg így rendeznéd sorba" Ha számok akkor miért stringként vannak tárolva? Ha vegyes akkor pedig célszerű egy sorrend mezőt tárolni és az eredeti érték helyett aszerint rendezni. Ezt a mezőt csak egyszer kell kiszámolni, mikor változik az eredeti mező értéke, az ORDER BY CONVERT(INT,strnumber) módszerrel ellentétben, mely minden lekérdezéskor újraszámolja.
"Melyik foglal kisebb helyet, string (pl. varchar) vagy szám (bigint)?" Valóban a hely számít, vagy a sebesség? _Szerintem_ számokat gyorsabban indexel és keres egy adatbázis mint karaktereket, de nem ismerek hivatalos statisztikát. A szükséges tárhelyet össze lehet hasonlítani, hiszen a varchar és a bigint mérete is ismert.
Vonalkód: Ha szám akkor tárold számként. Dátumot dátumként, és így tovább.
Az adatok Google Tesseract-tal digitalizált, nyomtatott anyagból vannak, és a nagy "i"-k helyére kis "l" betűk kerültek. Ez egész eddig nem derült ki, mert mindenhol olyan betűtípusokkal vannak megjelenítve az adatok, ahol nincs különbség a kettő között.
A SELECT HEX azonnal mutatta, hogy hol a hiba. Most már csak ki kell listáznom az összes olyan mezőt, amiben van "l" betű és manuálisan átírni nagy "i"-re, ahol kell.
Nem, a természetes rendezés az, ahogy stringeket egy ember rendezne. Példa:
Te ezek az adatokat vszleg így rendeznéd sorba:
30888 40777 143555 145666
A MySQL viszont így:
143555 145666 30888 40777
...mert stringről van szó. Erre, ha tisztán str-ként tárolt számokról van szó, egyszerű megoldás ez:
SELECT * FROM feld ORDER BY CONVERT(INT,strnumber) ASC
Nálam viszont ez nem működik.
Ha már itt tartunk, milyen adatformátumban érdemes egy 13-15 számjegyből álló vonalkódot tárolni, amivel matematikai műveleteket nem kell végezni, indexelni viszont kell. Melyik foglal kisebb helyet, string (pl. varchar) vagy szám (bigint)?
Lehet tévedek, de a natural ordering nem az, amikor nincs explicit rendezés, hanem a fizikai tárolás sorrendjében kapod vissza a sorokat?
A nev+0 eredménye szöveggel kezdődő mezők esetén 0 lesz, számmal kezdődő mezők esetén a szám, ezért lesz az a sorrend amit látsz, gyakorlatilag ahogy rögzítve lettek az adatok. Próbáld ki: SELECT nev + 0, tabla.* FROM tabla ORDER BY nev + 0 ASC
A SELECT * FROM tabla ORDER BY nev ASC abban a sorrendben adja vissza a sorokat ahogy szeretnéd (Server version: 5.0.89, nev: varchar, utf8_general_ci), ha nálad nem akkor lehet vannak nem látható karakterek a mezőkben.
Exportáld az adatokat és nézd meg hexában mi van a táblában.
Köszönöm, ennek alapján meg tudtam csinálni, de inkább úgy, hogy:
SELECT id, termek.nev, SUM(mennyiseg) AS keszlet FROM ( ( SELECT id, termek.nev, SUM(mennyiseg) AS keszlet FROM beszerzes, termekek WHERE beszerzes.id = termek.id GROUP BY id)
UNION
( ugyanez még 1x, de eladásra) AS raktarkeszlet GROUP BY id ASC HAVING ... ORDER BY...
Ez csak vázlat, valójából hosszabb és összetettebb a lekérdezés.
A rendszeren lesz még sok csiszolnivaló, mert egy olyan gép, ami egy sima "SELECT * FROM table" lekérdezést 0,0002s alatt összedob, az az enyémen 0,18s-et gondolkodik. Most még mindegy, hogy másodpercenként öt vagy ötezer lekérdezés futhat le, de ha akkora leszek, mint az amazon... ;o)
SELECT fo.termekid AS id, fo.termeknev AS nev, vett-eladott FROM termek fo, (SELECT SUM (mennyiseg) AS vett FROM beszerzesek be WHERE be.termékid=fo.termékid), (SELECT SUM (ki.mennyiseg) AS eladott FROM eladasok ki WHERE ki.termékid=fo.termékid) WHERE ... AND vett-eladott>0;
Eddigi legbonyolultabb, lekérdezésem kiadja két tábla azonos azonosítójú rekordjaiban lévő "quantity" mezők összegét. Az egyik tábla a beszerzés (stock) a másik az eladás (sales), a többi most nem érdekes. A táblaszerkezetet örököltem, ha majd minden jól működik, lesz időm racionalizálni.
Tehát a lekérdezés:
SELECT models.bar_models, cars.name_cars, colors.name_colors, ( SELECT sum( quantity ) FROM stock WHERE stock.bar_models = models.bar_models) - (SELECT sum( quantity ) FROM sales WHERE sales.bar_models = models.bar_models ) AS inStock FROM models, cars, colors WHERE models.id_cars = cars.id_cars AND models.id_colors = colors.id_colors AND inStock >0
A problémám az "AS inStock" és az "AND inStock > 0" részekkel van. Szeretném, ha a listában nem jelennének meg azok a sorok, ahol minden beszerzett tétel el van adva, azaz "inStock = 0", de a módszer, amit próbáltam, nem működik. Hogy lehet megcsinálni?
talan ird le mit, mivel hogy csinaltal. tabla strukturat, utasitasokat. Amit mondasz nyilvan nem igaz, abbol a szempontbol hogy user error kell legyen nalad.
Kezdő vagyok még az sqlben, és most a fulltext kereséssel ismerkedem.
A problémám a következő: Van egy táblám 8 oszloppal, ebből két oszlopnál szeretném alkalmazni a fulltext keresést, de ha feltöltöm az adatbázist nem muködik a keresés, ha törlöm ezt a két oszlopot majd ismét kreálom és adatot is felviszek a cellába, akkor működik, de ha ezt ismét törlöm és a nullárol szeretnék adatot felvinn és működjön a keresés akkor nem működik, csak ha ujra végrehajtom a fentieket.
ha vannak foreign key-ek akkor van eselyed:) ha nincsenek akkor egyeszeruen nezd vegig, tobbnyire user_id lesz a kapcsolat a users tablaval, vagy hasonlo. illetve nezd meg mitol hal el a forum, milyen query-k nem adnak eredmenyt
A segítségetek kérném picit. Van egy phpbb alapú fórumom, amiben felhasználókat töröltem volna adatbázis oldalon. Odáig jutottam, hogy töröltem a phpbb_users táblából őket, ettől viszont elhalt az egész fórum, csak adatbázis oldalról érem el. Mint kiderült további kapcsolataik is voltak, de azt egyelőre nem sikerült kiderítenem, hogy melyik táblában. Van olyan parancs mysql alatt, ami gyakorlatilag egy konzisztencia ellenőrzés, és törli az inkonzisztens adatokat?
union-nal? select id, sapkanév as név from sapkák where kiemelt = 1 union select id, név from mezek where kiemelt = 1 union select id, valami as név from cipők where kiemelt = 1
Üdv. Egy számomra fontos kérdésem lenne. Kaptam egy adatbázist. Külön táblában vannak a cipők a sapkák és a mezek. mindegyik táblában mindegyik terméknél meg lehet adni hogy kiemelt-e vagy sem. Azt szeretném megtudni, hogy egy lekérdezéssel, hogy tudom megoldani, hogy lekérem mindhárom táblából egyszerre a kiemelt termékek id-ját, nevét.