Abból indultam ki, hogy phpMyAdmin-ban a felhasználóhoz meg lehet adni, adatbázis specifikus jogoknál, a következőt:
Jogok hozzáadása a következő adatbázison: papi_%
Majd ehhez megadom a full jogot, értem ez alatt kipipálom az összes jogot.
Ezután a papi felhasználó létrehozhat bármilyen papi_-al kezdődő adatbázist, amire full joga lesz, de más előtagú adatbázist nem tud létrehozni és nem is fér hozzá.
Ezt szeretném én megadni parancssorból, vagyis scriptből, hogy amikor létre kell hozni 20-30 felhasználót, akkor ne egyessével keljen mindenkinek megadnom ezt a beállítást.
olyan nincs, hogy a jovore majd letrehozhatja :) Tehat papi_% az bukta. Amugy, ha tud letrehozni db-t a papi, akkor az az ove is lesz. Ergo miert kellene meg kulon grantolni? Ha nem a papi hozza letre, akkor meg a create db grantold a db-hez a jogokat. Nemletezo db-hez nem letezhet jog adas sem.
Bash script segítségével szeretnék csoportosan létrehozni MySQL felhasználókat. Valamint a felhasználóknak full jogot adni minden felhasználónév_-al kezdődő táblázatra, amit létrehoznak. Tehát pl. jakab felhasználó létrehozhatja a jakab_drupal, jakab_joomla stb. adatbázist és arra full joga is lenne.
A kód a következő:
Q1="CREATE USER '$username'@'$databaseLocation' IDENTIFIED BY '$password';" Q2="GRANT USAGE ON *.* TO '$username'@'$databaseLocation' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;" Q3="GRANT ALL PRIVILEGES ON '${username}_%'.* TO '$username'@'$databaseLocation';" Q4="FLUSH PRIVILEGES;"
A felhasználókat létre hozza, azzal nincs gond. A probléma a Q3-as sorral van:
Q3="GRANT ALL PRIVILEGES ON '${username}_%'.* TO '$username'@'$databaseLocation';"
Ezt valamiért nem szereti a MySQL, és sajnos nem jöttem rá miért. Mi lehet a probléma vele?
A hibaüzenet: ERROR 1064 (42000) at line 1: 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 ''papi_%'.* TO 'papi'@'localhost'' at line 1
A kész SQL parancs, amit átad a script a MySQL-nek:
CREATE USER 'jakab'@'localhost' IDENTIFIED BY '123456'; GRANT USAGE ON *.* TO 'jakab@'localhost' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; GRANT ALL PRIVILEGES ON 'papi_%'.* TO 'jakab'@'localhost'; FLUSH PRIVILEGES;
ha veges szamu a cegek szama, es tetszik, hogy ennyit beirsz, akkor jo. Mysql sok lehetoseg nincs ezen a teren, sql tekinteteben, de tarolt eljarast mar irhatsz mysql eseten is, es ott megoldhatod, hogy igy add vissza. Mondjuk ha gyakrabban valtoznak a cegek ,mintsem kenyelmes lenne mindig ujra irogatni a kodot hozza, vagy csak mert dinamikusan akarod megoldani :)
Igazából csak "szakmai szempontból" izgat a dolog. Minden felmerülő problémára van MySQL parancs, már csak egybe kéne pofozni...
Ha van kedve másnak isk eljátszani vele, kicsit konkrétabban: cégek rendelései egyetlen bizonyos termékből, három oszlop: honap, ceg, db
A cégek száma véges (legyen 3), természetesen a hónapoké is, de egy cég egy hónapban tetszőleges alkalommal rendelhet, és tetszőleges darabszámot.
Eredménynek egy egyszerű kétdimenziós táblázatot szeretnék, ahol:
1) a sorok a hónapok
2) az oszlopok a cégek,
3) a táblázat celláit a rendelések összesítése adja, pld CEG2 májusban 17 db-ot rendelt (most hogy egyszer 18-et, vagy 3-szor 6-ot, az lényegtelen)
GROUP BY honap segítségével nagyon egyszerű az első, de így minden hónapnak 3 sora lesz, 1-1 céggel...hopp, most asszem találtam valamit, talán ez lesz a jó:
SELECT honap, SUM(CASE WHEN ceg="ceg1" THEN db ELSE 0 END) AS ceg1_db, SUM(CASE WHEN ceg = "ceg2" THEN db ELSE 0 END) AS ceg2_db, SUM(CASE WHEN ceg="ceg3" THEN db ELSE 0 END) AS ceg3_db FROM rendelesek GROUP BY honap ORDER BY honap
Így ránézésre pont azt csinálja ami nekem kell, hogy a result minden sora az oszlopok sorrendjében tartalmazza a kívánt adatot. Na ki is próbálom. Basszus hát csak nem csalódok a MySQL-ben, tud ez mindent :)
A tökéletes akkor volna, ha nem kéne megadni a feltételben kézzel az értéket, hanem "kinyerné saját magából"...na jó ez tán már túlzás.
A végfelhasználó közvetlenül MySql SELECT-et futtat? Mert ha nem, akkor van valamilyen host-nyelv (pl C), amiben olyan táblázatot csinálhatsz, amilyen kell.
Ez lehet, hogy olyan kérdés, mint egy pár debrecenit kérni a Burger Kingben, de azért felteszem (hosszú volt a nap, nem tudok gondolkodni).
Szóval egy multilpe GROUP BY szerű feladat áll előttem, és ez a problémám, hogy itt ugye alapesetben a sorok lehetséges száma az előfordulások szorzata, tehát ha a oszlop (hónap) a táblázatban kétféle értéket vesz fel, b oszlop (cégnevek) meg hármat, akkor GROUP BY a,b egy hatsoros result (feltéve, hogy minden eset előfordul). Persze hogy az egésznek értelme legyen, van egy c oszlop is, ennek a SUM értéke tölti majd fel a táblázatot.
De...nekem olyan táblázat kell, ahol minden hónap (a oszlop) egy sor, az oszlopok pedig cégnevek (b oszlop). Anélkül, hogy a PHP-ben játszanék, lehetséges a kiíratás egyetlen elegáns MySQL lekérdezéssel? Ahol a result két sor.
Jelenleg úgy oldom meg, hogy ahány előfordulása van a-nak, annyiszor futattom a query-t, és csak szimplán b-re csoportosítok.
Kicsit részleteznéd, tök analfabéta vagyok még :-S nekem kb ennyi van meg :-(
<?php
$kapcsolat = mysql_connect("127.0.0.1", "xxxxx", "yyyy"); if (!$kapcsolat) die("Nem sikerült kapcsolódni az adatbázishoz!"); mysql_select_db("ketvillbt", $kapcsolat) or die("Nem sikerült kiválasztani az adatbázist!"); $bbbb = mysql_query("SELECT * FROM ketkalk");
Gondolom elég lerágott csont, de elég terjedelmes ez a topic, hogy megkeressem
:-S Nem értek a MSQL-hez de csak egy pici dologra lenne szükségem.
Van egy adatbázisom egy szerveren mondjuk van benne 5 oszlop legyen a neve? 1. oszlop, 2.oszlop, 3.oszlop, 4. oszlop, 5.oszlop és van 5 sorom. megszámozva 001, 002, 003, 004, 005, szeretném lekérdezni csak egy sorát, és kiírattatni, hogy tudom ezt megoldani.
Igazából újra lett telepítve a Linux és eltűnt a hiba. Egyszerűen nem értem, hogy mi volt. Igaz, először kicsit kacifántosan volt telepítve, véletlenül két féle SQL szerver is felkerült, talán azok kavarodtak össze, de akkor sem értem, miért volt az, hogy 4 gépig még jó volt a kapcsolat, 4 gép felett meg már nem tudott csatlakozni, és a korábban csatlakozott 4 gépen is elszállt a kapcsolat...
Egy nagyob bosszantó problémám van, hátha valaki tud segíteni.
Van egy kis programunk, ami egy mysql szerver által kér le adatokat egy adatbázisból.
Ez a program több (konkrétan 6db) gépen fut egyszerre.
Eddig, teszt időszak alatt egy XP volt a szervergépen, apache-php-mysql-el (XAMMP).
Most csináltunk egy Linuxos szervert hozzá, mysql-server-rel, és azóta valami nagyon nem oké.
Úgy néz ki a dolog, mintha egyszerre csak 4db számítógépről engednél a lekérdezéseket. Tehát, amíg csak 4 gépen fut a program, addig semmi gond. Amint elindítom az 5., 6. gépen, már nem tud csatlakozni, "Lost connection - waiting for initial communication packet" hibával elszáll (hiba kód: 2013).
Ami NAGYON érdekes, hogy amikor az 5., 6 gépen próbálom, a többi, addig jól működő 4 gépen is elszáll a dolog, tehát nem tudnak lekérdezni a szerverről már azok sem, DE csak pár másodpercig vagy max. 1-2 percig, aztán megint jó. Őrjítő a dolog.
Mi van vajon rosszul konfigurálva? A mysql szerverünk? Vagy a Linuxon valami egyéb?
Néztem már mindenféle logot, beállítottam mysql logolást, mindent, de sehol semmi nasználható infó.
Előre is nagyon köszönök minden infót, ötletet, tanácsot.
A feltöltéshez valózínűleg nem UPDATE-re, hanem iNSERT-re lesz szükséged. INSERT jos_vm_productSET `product_thumb_image`={resized/szimering_120x15_511526ebe036f_90x90.jpg}, `product_full_image`={szimering_120x15_511526ebe2c31.jpg}
Gyanítom, hogy ez két kölön művelet. Feltöltésnél ezt kell használni. Listázásnál, az előző SELECt... -et.
Hát mezőket akarok feltölteni. Írtam korábban, hogy egy csomó terméknek ugyanazt a képet adnám, és szeretném feltölteni a kép mezőt, az adott kép elárási útjával...
Ha nem írok UPDATE-t, akkor kiválasztja amit kell, tehát azokat a termékeket, amelyeknek a nevében szerepel a szimering szó. A hiba az UPDATE-ben lesz, de próbáltam már INSERT-et és REPLACE-t is, szintén doksi alapján, de valamiért nem akarja tenni egyik sem a dolgát. :(