- Samsung Galaxy Watch6 Classic - tekerd!
- Poco F7 Pro - jó, de az amatőr sem rossz
- Az iPhone hajthatatlanságán gúnyolódik a Samsung
- Megjött a jubileumi Pixel széria
- Yettel topik
- Samsung Galaxy S21 FE 5G - utóirat
- Milyen okostelefont vegyek?
- iPhone topik
- Vivo X200 Pro - a kétszázát!
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
Új hozzászólás Aktív témák
-
nova001
senior tag
hello
van egy oldalam amin bejelentkeztem a control panelen és átirtam a mysql jelszavam.azota az oldal az alábbi hiba miatt nem fut:
Database connection error (2): Could not connect to MySQL.mi lehet a gond ? phpmyadminba hozzá tudok férni az adatbázisomhoz...valamit átkéne irnom ?
az oldalon joomla fut
-
martonx
veterán
válasz
kornyiktamas #1298 üzenetére
A klasszikus publikus hosztingok nem engednek távolról hozzáférni a Db-hez.
Ami neked kell az egy virtuális szerver. Erre azt telepítesz, amit csak akarsz, és onnan férsz hozzá ahonnan akarsz. Azure, AmazonWs, Google Engine, vannak magyar virtuális szerver hosztingok is, válassz közülük. -
martonx
veterán
válasz
kornyiktamas #1296 üzenetére
Ingyenes MySql kell? Telepíts egyet a gépedre lokálisan
-
kornyiktamas
aktív tag
sziasztok
tudnátok küldeni normális "ingyenes" domain szolgáltatónak a weboldalát? ingyen kéne mysql szerver ahova tudok adatot menteni. köszönöm -
spammer
veterán
válasz
Sk8erPeter #1293 üzenetére
Ja, akkor félreértettem
Azt hittem, hogy röviden akarta kifejezni, hogy hogyan ne csináljuk
Furcsa is volt, hogy így volt megfogalmazva
Akkor jó, akkor maradok a != -nél
-
spammer
veterán
Mi az oka annak, hogy query-ben nem ajánlott a != használata? Lásd [link]
Mert ahogy ott is írja, működik, de miért nem ajánlott ilyen formában használni? Biztonsági okokból?
-
spammer
veterán
válasz
martonx #1288 üzenetére
Igen, tudom, éppen ezért kérdeztem.
"countnál talán éppen nem"
Mármint ezért, mert nem tudom, hogy countnál számít-e. Azt tudom, hogy sima selectnél nem ajánlott, ha amúgy sem kell az összeset kiválasztani. Ezt már megtanultam
De inkább én sem írok csillagot countnál sem.
-
martonx
veterán
válasz
spammer #1285 üzenetére
"és írjak nyugodtan csillagot" - nos ezt éppen el kellene kerülni. Írhatsz a count-on belül bármit, én pl. count(1)-et szoktam, de a * használatát kerülni kellene, mert minden esetben plusz munkát jelent az SQL motornak a * feldolgozása (countnál talán éppen nem, de nem kellene rossz szokásokat felvenni).
-
spammer
veterán
válasz
fordfairlane #1286 üzenetére
Rendben, köszi.
-
spammer
veterán
válasz
Peter Kiss #1283 üzenetére
És így?
$result = $db->query("SELECT COUNT(id) FROM posts");
$RowCount = $result->fetch_row();
echo "Total" . $RowCount[0];Működik, csak a kérdés, hogy mint módszer, ez is rossz-e?
Egyébként ha csak 'id' -t COUNT-olok, az számít valamit, vagy lényegtelen, és írjak nyugodtan csillagot? (Az elvileg ugye mindent kiválaszt).
(#1284) fordfairlane: igen, már értem, csak először rosszul értelmeztem
-
-
Peter Kiss
őstag
válasz
spammer #1282 üzenetére
Nem oké. Ha így számolod a sorokat mondjuk egy 5 millió soros táblában, akkor azt nagyon rosszul teszed.
SELECT COUNT(*) AS RowCount FROM posts
Aztán lekéred ennek az eredményhalmazát mint bármelyik más SELECT-nek, fetch-eled mondjuk objektumba (egy sorod lesz), az így kapott objektum RowCount field-jében lesz benne a COUNT(*) eredménye.
-
spammer
veterán
válasz
Peter Kiss #1281 üzenetére
Aha, rosszul értelmeztem, így már oké:
SELECT id FROM posts
-
spammer
veterán
Próbálom megszámolni a sorokat mysql-ben, phpmyadminban lefuttatva teljesen jó:
SELECT COUNT(*) FROM posts
esetleg:
SELECT COUNT(id) FROM posts
Kiadja, hogy 8 darab van.
php-ben lefuttatva a query-t kiíratom az eredményt:
echo 'Total results: ' . $result->num_rows;
És ezt kapom:
Total results: 1
-
DanielK
addikt
válasz
SureStudio #1278 üzenetére
elég egy helyre is feltenni...
-
SureStudio
tag
Sziasztok!
Az lenne a kérdésem(kérésem), hogy van egy oldalam...olyan php kódok szeretnék bele írni, ami a látogató IP címét tárolja egy mysql adatbázisban. Esetleg egy dátumot is hozzá. Előre is köszönöm! -
spammer
veterán
válasz
fordfairlane #1275 üzenetére
Nem tudok róla, főleg, hogy ez else részben van benne:
if (ha jók adatok) {
} else {
error üzenet
és ez az adatbázis query.
}
Na most kipucolom és elkezdem újra összerakni, mert nem vágom, miért futtatja le 2x.
Szerk: 2x fut valamiért, most látom logban is.... Na akkor keresgélek
-
spammer
veterán
Van valakinek ötlete, hogy miért lehet az, hogy duplán számol valamit update-kor?
Sikertelen bejelentkezéseket akarok számolni:
UPDATE users SET hitcount=hitcount+1 WHERE ........
+1 van, és mégis 2-esével növeli. 0-2-4... stb.
-
spammer
veterán
Köszi a válaszokat, átállítottam BIT-re a mezőket.
-
martonx
veterán
válasz
Jester01 #1270 üzenetére
"Azt kétlem, hogy egyetlen BIT mező tárolásához ne foglalna le legalább egy byteot. Esetleg ha több ilyen mező van egy rekordban akkor összepakolhatja őket." - ez igaz, ez annyival árnyalja a képet, hogy a helymegtakarítás nem feltétlenül jön elő.
Viszont kettő plusz szempontot még mondok a bit mellett. 1. amikor lehetséges méretcsökkenésről beszélünk ott ne csak a tábla által elfoglalt helyet vegyük figyelembe, hanem könnyebben, több mindent tarthat a memória pufferében az SQL motor, illetve az adatok átadásakor is megjelenik a kisebb méretből fakadó előny. Nem mindegy, hogy egy SQL lekérésre 100.000 byte-ot, vagy 100.000 bit-et kapunk vissza.
-
Peter Kiss
őstag
válasz
martonx #1269 üzenetére
így igaz.
@Jester01
BIT(M) = approximately (M+7)/8 bytes
B-Tree esetén value-t és record pointer-t tárol (MyISAM - offset, INNODB - primary key) szóval számít itt is a méret. "Alap b-tree index" kapcsán nem tudom, mire gondolsz, de, ha a primary key-re INNODB-ben (clustered index), akkor abban valóban foglal helyet egy BIT(N), hacsak nem az a primary key, de ilyen index, ha hatalmas a tábla, kb. nem való semmire, csak a JOIN-ok gyorsítására PKEY mentén. -
-
martonx
veterán
válasz
Peter Kiss #1267 üzenetére
Plusz milliós nagyságrendű soroknál már jelentős helyet tudsz megtakarítani. Ha az a meződ index, akkor a hely megtakarítás máris duplázódik.
-
bolvar
senior tag
Sziasztok
Elég kezdő vagyok még a mysql témában de szerintem ez a megfelelő topic a kérdésemnek.Facebook app írásra adtam a fejemet és herokun keresztül tettem ezt.Hozzácsatoltam az appomhoz a cleardb mysql addont de innentől kezdve elakadtam.Nem tudom hogy az adatbázisomat hogy érjem el.Megvan az url címe de arra nem tudok felcsatlakozni.Ha esetleg valaki tudna segíteni vagy felvilágosítani mit csinálok rosszul azt megköszönném.De ha valaki tud elfogadható áron ssl-es tárhelyet azt is szívesen fogadom
Előre is köszönöm a segítségeteket -
spammer
veterán
True/False értékre TINYINT mezők vannak nekem beállítva, de látom, hogy ilyesmire használható a BIT is. Van értelme BIT -re váltani, ha csak 0 és 1 értékek kellenek (csak a true/false miatt), vagy tökmindegy? Gyakorlati haszna van, vagy ne foglalkozzak vele, jó ez?
-
spammer
veterán
válasz
Peter Kiss #1264 üzenetére
Oh shit, szóval az volt a baj, hogy már volt néhány sorom, és mikor létrehozta volna az oszlopot így azok alapból üresek voltak, így már nem is lehetnek egyediek (mert nincs tartalmuk). Ehh... Most már jó, köszi
-
spammer
veterán
Most szeretnék hozzáadni a táblához egy ilyen nevű oszlopot. Varchar lenne, igen. Phpmyadminban kiválasztottam, hogy új oszlop beszúrása:
Név: confirm_id
Típus: VARCHAR
Hossz/érték: 64
Index: UNIQUEEnnyi, kész, rányomok a mentés gombra, és hiba.
#1062 - Duplicate entry '' for key 'confirm_id'
Nincs más confirm_id nevezetű sehol, most akarom létrehozni.
Lehet akárhány unique oszlop egy táblában, nem? Másképp hogyan lehetne megadni, hogy az adott oszlopban lévő adatok nem ismétlődhetnek, egyedieknek kell lenniük? Vagy félreértek valamit?
-
spammer
veterán
Létrehoznék egy új mezőt, aminek egyedinek kellene lennie, de hibaüzenetet kapok:
Duplicate entry '' for key 'confirm_id'
Ez milyen duplikált dologról magyaráz?
Simán létre tudom hozni, de ha unique-ot állítok be, akkor hiba. Enélkül meg hogy lehetne egyedi?
-
Brown ügynök
senior tag
válasz
Apollo17hu #1259 üzenetére
A stock_intake tábla egy store_id-t is tartalmaz. Na, inkább megmutatom a táblákat.
intake
id, name, store_id, available, created, updatedintake_item
id, intake_id, product_id, quantityreservation
id, name, created, completedreservation_item
id, reservation_id, intake_id, product_id, quantityproduct_history
id, product_id, intake_id, reservation_id, store_id, createdMost úgy oldottam meg, hogy a product_history táblába felvettem a mennyiséget és a teljesülés dátumát (amikor ténylegesen ki/bevitték a raktárba az árut). Kvázi tehát kétszer lesz meg az adat, de nem tudtam máshogy megoldani, hogy a teljesülés dátuma szerint rendezze a bevitel és kivétel sorait a lekérdezésben. A product_history a változtatások után:
product_history
id, product_id, intake_id, reservation_id, store_id, quantity, created, completedA lekérdezés:
SELECT h.id, h.completed, quantity, r.name reservation_name, i.name intake_name,
i.created intake_created, r.created reservation_created
FROM stock_product_history h
LEFT JOIN stock_intake i ON i.id = h.intake_id
LEFT JOIN stock_reservation r ON r.id = h.reservation_id
AND r.completed BETWEEN :from AND :to
WHERE h.product_id = :productId
AND h.store_id = :storeId
AND h.completed BETWEEN :from AND :to
ORDER BY h.completed -
Apollo17hu
őstag
válasz
Brown ügynök #1256 üzenetére
A stock_intake_item és a stock_intake táblát összevonhatnád. Utóbbi csak egy időpecsétet tartalmaz, felesleges szétszedni. Lenne a kettőből egy táblád, ami megmutatja, hogy adott napon adott termékből hány darab került be.
Hasonlóan kellene tenni a stock_reservation_item és stock_reservation táblákkal.
IN helyett elvileg JOIN-olhattad volna a stock_intake táblát. Úgy, ahogy a stock_reservation táblát is bekötötted.
-
Apollo17hu
őstag
válasz
Brown ügynök #1256 üzenetére
Első ránézésre nem igazán menő, hogy IN után allekérdezést használsz. Ha kicsit több időm lesz, megnézem a kódot, de ha az eredmény jó neked, akkor nagy gond nem lehet.
-
Brown ügynök
senior tag
válasz
Apollo17hu #1254 üzenetére
Így már csak azokkal a beviteli és foglalási sorokkal tér vissza amik a megadott intervallumba esnek. Csak az a baj, hogy nem a product_history tábla created oszlopa szerint rendezi őket (gondolom a group by miatt). Úgy látom szinte az összes adatot be kell szúrnom az intake és a reservation táblából, hogy időrendben meg tudjam jeleníteni a mozgásokat... Köszi a segítséget!
SELECT *
FROM stock_product_history h
LEFT JOIN stock_intake_item it ON it.product_id = h.product_id
AND h.reservation_id is NULL
AND it.intake_id IN (SELECT id
FROM stock_intake
WHERE available BETWEEN :from AND :to
AND store_id = :storeId)
LEFT JOIN stock_intake i ON it.intake_id = i.id
AND i.available BETWEEN :from AND :to
LEFT JOIN stock_reservation_item ri ON ri.product_id = h.product_id
AND ri.reservation_id = h.reservation_id
LEFT JOIN stock_reservation r ON r.id = ri.reservation_id
AND r.completed BETWEEN :from AND :to
WHERE h.product_id = :productId
AND h.store_id = :storeId
GROUP BY ri.id, i.id
ORDER BY h.created ASC -
drogery
tag
Sziasztok,
egy kis segítséget kérnék. Egy lekérdezéshez szeretnék egy új oszlopot adni.
Van egy besorolás mezőm, ami 15 értéket vehet fel, amit 3 csoportra szeretnék bontani.
Tehát ha ez a besorolás = 1,3,4,5stb akkor az új mezőm adjon 1et
ha 2,10,6 stb akkor adjon 2 őt
ha 7,9,11 akkor adjon 3at.
Ezt hogyan tudnám megcsinálni? -
Apollo17hu
őstag
válasz
Brown ügynök #1253 üzenetére
Akkor szerintem 2 tábla kellene:
BEVITEL: termék | mikor | mennyit
FOGLALÁS: termék | mikor | mennyitEzeket "termék"-en keresztül kötöd össze, a két "mikor"-ra szűrsz, a "mennyit" mezőt pedig aggregálod (GROUP BY).
Egy táblában is meg lehetne oldani (ahogy neked most a főtáblád tárolja az adatokat) kötések nélkül:
TÁBLA: termék | bevitel_mikor | bevitel_mennyit | foglalás_mikor | foglalás_mennyit
Ebben az esetben viszont vagy a "bevitel_mikor" és "bevitel_mennyit" vagy a "foglalás_mikor" és "foglalás_mennyit" mezők értéke lenne null, tehát feleslegesen nőne az adatbázis mérete.
A lényeg, hogy termékazonosítón keresztül lenne célszerű kötni.
-
Brown ügynök
senior tag
válasz
Apollo17hu #1252 üzenetére
A végcél az, hogy adott időszakra vonatkozóan megkapjuk egy termékről a raktári beviteleket (intake) és a teljesített foglalásokat (reservation) ami ez esetben a raktár kivétel lesz. Az i.available jelzi, hogy mikor van az áru ténylegesen a raktárban, a r.completed pedig azt, amikor teljesült a foglalás vagyis elvitték az árut. Foglalni a bevitelből lehet, tehát az intake_id a reservation táblában megvan.
-
Apollo17hu
őstag
válasz
Brown ügynök #1250 üzenetére
Kellene egy mező, ami megmondja, hogy a stock_product_history táblában mely intake_id-k mely reservation_id-kkal vannak kapcsolatban. (Kapcsolat esetén a mező értékének egyeznie kell a két rekordnál.)
Szerintem ezt lehet egyszerűsíteni, de nem teljesen értem, hogy mi a végcél. Talán egy olyan táblából kellene kiindulni, ahol az intake_id és a reservation_id egy soron szerepelnek, és csak akkor vannak töltve, ha a tényleges esemény (bevitel vagy foglalás) megtörtént. Nem tudom, hogy az események között van-e valamiféle időbeli sorrendiség, de előfordulhat, hogy mondjuk volt már foglalás, de azt nem vitték még be (ekkor utóbbi értéke null). Vagy az intake nem erre vonatkozik?
Ha ez tisztázódott, utána lehet a product, store stb. mezőket hozzáadni a modellhez.
-
Brown ügynök
senior tag
válasz
Apollo17hu #1249 üzenetére
Valóban. Jelenleg úgy van megoldva, hogy egy sorban vagy az intake_id vagy a reservation_id mező van kitöltve a stock_product_history táblában. Megnéztem, ha egy oszlopba írom őket egy másikba meg a típust adom meg és úgy kérdezem le, akkor is ugyanaz lesz az eredmény (gondolom az előző ok miatt). Igazából egy cikktörténetet szeretnék lekérdezni az intake(_item) és a reservation(_item) táblák csatolásával. Hogy alakítsam át a lekérdezést vagy a stock_product_history táblát, hogy úgy működjön, ahogy szeretném? Meg lehetne ezt oldani stock_product_history tábla nélkül is?
-
Apollo17hu
őstag
válasz
Brown ügynök #1248 üzenetére
Akkor a stock_product_history táblában nincs olyan rekord, ahol az intake_id beköti a stock_intake, a reservation_id pedig a stock_reservation táblát.
-
Brown ügynök
senior tag
válasz
Apollo17hu #1247 üzenetére
INNER-rel jó is lenne de akkor a reservation(_item) tábla sorait akkor nem kapcsolja hozzá.
-
Apollo17hu
őstag
válasz
Brown ügynök #1246 üzenetére
A LEFT JOIN miatt van: a stok_intake tábla minden rekordja bekerül. Használj helyette INNER JOIN-t, ami a táblák metszetét adja eredményül.
-
Brown ügynök
senior tag
Segítséget szeretnék kérni a következő lekérdezéshez:
SELECT *
FROM stock_product_history h
LEFT JOIN stock_intake i ON h.intake_id = i.id
AND i.available BETWEEN :from AND :to
LEFT JOIN stock_intake_item it ON it.intake_id = i.id
AND it.product_id = :productId
LEFT JOIN stock_reservation r ON r.id = h.reservation_id
AND r.completed BETWEEN :from AND :to
LEFT JOIN stock_reservation_item ri ON ri.reservation_id = r.id
AND ri.product_id = :productId
WHERE h.product_id = :productId
AND h.store_id = :storeId
GROUP BY ri.id, i.idAzt szeretném elérni, hogy az intake_item és a reservation_item táblából csak azokat csatolja, amelyek megfelelnek intake és a reservation táblánál felállított dátum (available, completed) követelményeknek. Ezzel a lekérdezéssel olyan intake_item sort is kapok ami kívül esik az available tartományán ( bár minden értéke 0 vagy null).
-
nymarti
csendes tag
sziasztok!
nem nagyon vagyok még otthon a mysql-ben, nem sikerült kitalálnom, hogy ezt hogy kellene
van egy tabom, ahol szeretném, ha az egyes tabokon egy tábla egy adott mezője jelenjen meg.már az első esetnél próbálkoztam: tartalom=tábla, tab_tartalom_egy=mező neve
<?php
switch($_GET['tabNum']) {
case 1: echo $tartalom['tab_tartalom_egy']; break;
case 2: echo "tartalom2"; break;
case 3: echo "tartalom3"; break;
case 4: echo "tartalom4"; break;
case 5: echo "tartalom5"; break;
}
?>Előre is köszi a segítséget!
-
-
Sk8erPeter
nagyúr
-
spammer
veterán
Lekérdezés, SELECT.
Alapból ugye így néz ki mondjuk:
SELECT name, type, color_blue, color_red, color_green, color_valami, color_mégvalami, color_satöbbi...
Tehát ennyi lenne a lényeg:
SELECT name, type, color_% -> valami ilyesmire gondoltam. Magyarul, ne kelljen kiírni minden color_ -sal kezdődő oszlop nevét.
Ha lehet ilyen és nem túl bonyolult. Ha igen, akkor nem fontos, beírom kézzel, csak ha van rá "shortcut", akkor mégis csak egyszerűbb
-
bpx
őstag
válasz
spammer #1236 üzenetére
na akkor tisztazzuk mit szeretnel
egy adott tablarol megtudni, hogy milyen "color_" kezdetu oszlopai vannak (es semmi adatot)?
ebben az esetben:
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name='colors'
AND column_name LIKE 'color_%';(a _ karaktert szerintem escape-elni kell ha biztosra akarsz menni, mert a LIKE-ban az pontosan 1 darab akarmilyen karaktert jelenthet, tehat a fenti minta illik arra is pl., hogy "color1")
vagy pedig magat a lekerdezest szeretned eloallitani? tehat nem tudod elore, hogy a tablanak milyen color oszlopai vannak, de szeretned azoknak a tartalmat lekerdezni
ez esetben dinamikus SQL kell -
spammer
veterán
Félreértjük egymást, vagy én értek félre valamit
Az egész egy táblában van, egy táblának az oszlopai. Nincs másik tábla.
Ezt a kódot úgy találtam (stackoverflown asszem), és ha önmagában lefuttatom, működik is, de subqueryként nem jó.
-
Apollo17hu
őstag
válasz
spammer #1233 üzenetére
Ha sima SQL lenne, akkor ennyi elég lenne:
SELECT column_name
FROM information_schema.columns
WHERE table_name='colors'
AND column_name LIKE 'color%'szerk.: Most nézem, hogy neked nemcsak a mezőnevek, hanem attribútumok is kellenének. Ha ezek az attribútumok benne vannak az information_schema.columns táblában, akkor elég felsorolnod őket, ha nem akkor a FROM után sorold fel az érintett táblákat, WHERE-ben pedig kösd össze őket.
-
spammer
veterán
SELECT queryben akarok "LIKE módszerrel" kiválasztani mezőneveket, például:
Pl. ilyen nevek:
color_blue
color_green
color_red
stb.query:
SELECT name, type,
(SELECT column_name
FROM information_schema.columns
WHERE table_name='colors'
AND column_name LIKE 'color_%')
FROM ..........Ezt kapom:
Subquery returns more than 1 rowHogyan kellene subquerybe beleírni vagy hogyan lehetne kiválasztani color_ előtaggal kezdődőket, anélkül, hogy kézzel beírnám (felsorolnám) őket?
-
spammer
veterán
válasz
Peter Kiss #1231 üzenetére
Köszi, akkor jó. Azt hittem, hogy ha az adatbázisban be van állítva a kódolás (meg a php head-jében), akkor nem kell pluszban beállítani.
-
spammer
veterán
Milyen storage engine-t érdemes használni egy kis oldalhoz? Tudom, kicsi az relatív, de nem lesznek több ezer vagy tízezer sorok valószínűleg. Olvastam, hogy a MyISAM jobb ilyenkor, de azt is olvastam, hogy az INNODB, előnyösebb több szempontból, pl. crash vagy más hiba esetén. Nincs tapasztalatom, alapból INNODB volt beállítva, azzal készült el pár tábla, de FULL TEXT -et akartam beállítani, és látom, hogy (még) nem támogatja az INNODB. Ez utóbbi nem életbevágóan fontos, mert most a LIKE módszerrel is működik a keresés, de a kérdés, hogy összességében és a jövőre való tekintettel maradjak-e az INNODB-nél?
A másik kérdés:
utf8_hungarian_ci van beállítva, de ha a php fájlban az adatbázis csatlakozás rész után nem írom be ezt:
$db->set_charset("utf8");
Akkor az ékezetes karakterek helyén kérdőjeleket rak ki. Az adatbázisnál, a tábláknál és az oszlopoknál is utf8_hungarian_ci van beállítva. Mi lehet a gond?
-
pvt.peter
őstag
Sziasztok!
Adott az alábbi utasítás:
CREATE TABLE IF NOT EXISTS devices (
...,
registration_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
...
)A kérdésem:
ezek után ha beszúrok egy rekordot ebbe a táblába, úgy hogy a registration_date mezőhöz nem adok meg semmit, akkor tlképpen egy TIMESTAMP érték fog tárolódni DATETIME formátumban, nem?Tehát ezekután hiába állítanám át MySQL-ben az időzónát, nem változna a registration_date mező, ha jól értem.
-
laracroft
senior tag
válasz
Apollo17hu #1225 üzenetére
Köszi!
Kicsit átalakítottam és jónak tűnik... -
Apollo17hu
őstag
válasz
laracroft #1217 üzenetére
MySQL-t nem tudom, de "sima" SQL-ben így lehetne (rendezést kiszedtem):
SELECT *
FROM (SELECT ugyfel.account AS account,
ugyfel.line AS line,
naplo.ido AS ido,
naplo.leiras AS leiras,
SUM(CASE WHEN naplo.leiras LIKE '%valami%' THEN 1 END) AS darab1
SUM(CASE WHEN naplo.leiras LIKE '%valami%' AND naplo.ido LIKE '2013-05%' THEN 1 END) AS darab2
FROM ugyfel,
naplo
WHERE naplo.account = ugyfel.account
AND naplo.line = ugyfel.line
GROUP BY ugyfel.account,
ugyfel.line,
naplo.ido
naplo.leiras
)
WHERE darab1 IS NOT NULL OR darab2 IS NOT NULL -- azon sorok kiszűrése, amelyek egyik feltételnek sem tesznek eleget -
fordfairlane
veterán
válasz
laracroft #1223 üzenetére
Ha a két lekérdezés túl sokáig tart, akkor egy is. Át kéne nézni / gondolni a táblák-mezők indexelését, amivel gyorsítani lehet az ilyesfajta lekérdezéseken.
A másik lehetőség, hogy, jellemzően webes környezetben sokkal több a táblából olvasás, mint az írás. Ebben az esetben azokat az aggregált adatokat, amelyek csak írás esetén változhatnak meg, és a lekérdezésük időigényes, előre ki lehet számolni, majd valahogy letárolni. Kvázi gyorsítótárazni. Mondjuk ez jelen esetben nem igazán járható út, de talán részhalmazokat elő lehetne állítani, amiket aztán gyorsabb átfésülni.
-
laracroft
senior tag
válasz
fordfairlane #1222 üzenetére
Igen de bazi hosszú volt és gondoltam hátha van egy megoldás, ami esetleg gyorsabb és csak 1 lekérdezés...
-
laracroft
senior tag
válasz
fordfairlane #1220 üzenetére
Szia!
Weblapon szeretném megjeleníteni mind a 2 értéket egyszerre!
A Union-ra én is rátaláltam, de azt nem ajánlották... -
laracroft
senior tag
Sziasztok!
Szükségem lenne a 2 lekérdezés darabszámaira külön-külön (darab1 és darab2), de mindenképpen csak 1 lekérdezést szeretnék használni.
SELECT UGYFEL.ACCOUNT AS account,
UGYFEL.LINE AS line,
NAPLO.IDO AS ido,
NAPLO.LEIRAS AS leiras,
COUNT(1) AS darab1
FROM UGYFEL,
NAPLO
WHERE NAPLO.ACCOUNT = UGYFEL.ACCOUNT
AND NAPLO.LINE = UGYFEL.LINE
AND leiras LIKE '%valami%'
GROUP BY account,
line
ORDER BY darab1 DESC,
line ASCSELECT UGYFEL.ACCOUNT AS account,
UGYFEL.LINE AS line,
NAPLO.IDO AS ido,
NAPLO.LEIRAS AS leiras,
COUNT(1) AS darab2
FROM UGYFEL,
NAPLO
WHERE NAPLO.ACCOUNT = UGYFEL.ACCOUNT
AND NAPLO.LINE = UGYFEL.LINE
AND leiras LIKE '%valami%'
AND ido LIKE "2013-05%"
GROUP BY account,
line
ORDER BY darab2 DESC,
line ASCElőre is köszönöm!
-
Brown ügynök
senior tag
válasz
martonx #1214 üzenetére
Köszi, így már működik:
SELECT i.product_id, SUM( i.quantity ) ,
( SELECT SUM( quantity )
FROM stock_deliver_item
WHERE product_id = i.product_id
) AS deliver
FROM `stock_intake_item` i
GROUP BY i.product_idHogy NULL-al is működjön a subqueryben az IFNULL() függvényt lehet használni.
-
biker
nagyúr
válasz
Brown ügynök #1213 üzenetére
ja, bocsi, tényleg
-
martonx
veterán
válasz
Brown ügynök #1213 üzenetére
A kivétel táblát subquery-ként kellene hozzácsapnod, mert így descartes szorzat keletkezik a product_id-k alapján.
-
biker
nagyúr
válasz
Brown ügynök #1211 üzenetére
nincs it semmi gond, az 1-es termékből nem adtál el, ezért az null
a többiből igencsinálj egy harmadik oszlopot a selectbe, amiben a két oszlop különbsége van!
talán így működhet? (vessző kimaradt)
SELECT i.product_id, SUM( i.quantity ) , SUM( d.quantity ), (SUM( i.quantity ) - SUM( d.quantity ) ) as diff
FROM `stock_intake_item` i
LEFT JOIN stock_deliver_item d ON d.product_id = i.product_id
GROUP BY i.product_id -
Brown ügynök
senior tag
Van két táblám, egy a raktári bevételezést, a másik pedig a kivételt mutatja. Ennek a kettőnek az összességéből megkapjuk a raktárkészletet. Íme a két tábla:
Bevételezés
Kivétel
Ez a lekérdezés a vártnak megfelelően működik:
SELECT product_id, SUM( quantity )
FROM `stock_intake_item`
GROUP BY product_idHa viszont hozzácsapom a kivétel táblát:
SELECT i.product_id, SUM( i.quantity ) , SUM( d.quantity )
FROM `stock_intake_item` i
LEFT JOIN stock_deliver_item d ON d.product_id = i.product_id
GROUP BY i.product_idMi lehet a gond? Illetve, ilyen esetekben érdemes-e csinálni egy harmadik táblát ami tulajdonképpen az aktuális készletet tárolnánk?
-
Phvhun
őstag
válasz
Peter Kiss #1208 üzenetére
és a history tábla az ugyanazokat a oszlopokat tartalmazza, mint az aktiális, vagy csak a változásokat ( Changetime, Changed_by, Data_name, Old_data, New_data ) ? mondjuk így
-
Peter Kiss
őstag
ValidFrom, CreatedBy, ValidTo, ClosedBy oszlopokkal ki kell egészítened azt a tábládat, amiben ilyen adatok vannak, de nem kell feltétlenül mindennek ebben lennie, készíthetsz egy plusz táblát, ami ...History, és abban van benne minden (ezzel a megoldással egyszerűbb ORM framework-höz illeszteni a cuccot).
-
Phvhun
őstag
Hogyan szokás egy olyan, mondjuk céges adabázist kivitelezni, amiben a cégadatok változhatnak, de a változásokat mind meg kell őrizni?
-
biker
nagyúr
nem ,bakker, hülye vagyok.
drop index, create indexNo, kipróbálom ezzel majd! köszi
Martonx: még nem eldöntött, hogy mysql vagy php probléma. MErt ha a mysql tudna importálni iso-8859-2 szöveget utf8-ba (és tud, hiszen a set names és a set character set ezt lehetővé teszi, bármilyen STRING bemenetnél) akkor nem lenne gond. De sajna a load data csv-ből dolgozik, nem input stringből, és itt nem működik a jelek szerint a fenti metódus.
Így lesz a mysql gondból php gond
-
biker
nagyúr
mondjuk nagyobb bajom, hogy ha a fulltext index előre be van állítva, és beimportálom a 180.000 sort, akkor csak 112-ezret importál be
erre a manual aztmondja, előre kapcsoljam ki az indexet, majd utólag új index, de ha a 180.000 sor be van tolva, akkor az indexelésnél hibát dob
#1034 error és 137-es hiba
erre a repair table sem megoldásMost itt szenvedek ezzel
-
Új hozzászólás Aktív témák
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! MSI B450M R7 1700X 16GB DDR4 128GB SSD 1TB HDD GTX 1650 Super 4GB Zalman T7 Chieftec 400
- BESZÁMÍTÁS! MSI B450 R5 5600X 16GB DDR4 512GB SSD 1TB HDD RX 5700 XT 8GB ZALMAN S3 TG Chieftec 600W
- Honor X6a 128GB, Kártyafüggetlen, 1 Év Garanciával
- HP 150W töltők (19.5V 7.7A) kis kék, kerek, 4.5x3.0mm + tápkábel
Állásajánlatok
Cég: FOTC
Város: Budapest