google 0 Author Share Posted November 12, 2005 Olyan kérdésem van, miként lehet phpMyAdminban összekötni táblákat egymással? Teszem azt, van két táblám, és azt szeretném, ha az egyik azonosító mezõje hivatkozna egy másik táblára, ahol a többi adat van. Link to comment Share on other sites More sharing options...
Mezofi 0 Share Posted November 12, 2005 SELECT biro.biro_neve,biro.orszag,partjelzo.partjelzo_neve,partjelzo.partjelzo_orszag FROM biro,partjelzo WHERE biro.merk_azon=1 AND partjelzo.merk_azon=biro.merk_azon A partjelzo nevû táblából már csak azt a sort veszi ki, amelynek ugyanaz a merk_azon-ja mint a biro táblában talált sor, merk_azon mezõjében találttal. Ui: Az azonosító mezõ nem tud hivatkozni másik táblára! Azt neked kell megadnod melyik táblákat akarod összekötni, a lényeg, hogy legyen két táblában ugyanolyan oszlop, és ezekben az oszlopokban legyen egyenlõ értékû mezõ is. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 12, 2005 Értem! Akkor csak a lekérdezésben van különbség. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 21, 2005 Egy olyan SQL-utasításra volna szükségem, amely megmondja, hogy a mezõben többször szerepel-e ugyanaz a karakterlánc. Ilyenem van: LIKE '%$nev_vezetek_<span>$nev_kereszt%' Ez a mezõben így néz ki: Kovács <span>Kálmán</span> (21.) Tehát megkapom, hogy ilyen név található-e a mezõben (a <span> természetesen csak a megjelenítés miatt kell). Azonban nem egyszer elõfordul ilyen eset: Kovács <span>Kálmán</span> (21., 44.) Itt azt szeretném, ha tudnám a lekérdezés után, hogy kétszer szerepel benne a név. Esetleg hajlandó lennék így megoldani a mezõben: Kovács <span>Kálmán</span> (21.), Kovács <span>Kálmán</span> (44.) A lényeg, hogy tudjam, pontosan hányszor szerepel benne. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 21, 2005 Ez az elv: select mezö,count(*) as gyakorisag from tábla where mezö like minta group by 1 Ha pedig csak azokat szeretnéd megkapni, amikbõl több van, akkor: select mezö from tábla where mezö like minta group by 1 having count(*)>1 Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 21, 2005 A group by 1-nél az 1 mit fejez ki? Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 21, 2005 Az eredmény tábla elsõ mezõje szerint. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 21, 2005 Sajnos az történik, hogy kiírja nekem az összes mezõ tartalmát, amelyben benne van a név. Négy ilyen van, a mysql_num_rows() és négy sort jelez. Egyben kétszer szerepel, egy másikban háromszor, a maradékban egyszer-egyszer. Link to comment Share on other sites More sharing options...
Mezofi 0 Share Posted November 21, 2005 Bár tévedjek, de szerintem ilyen sql utasítás nem létezik, sõt amenyire én tudom php sztring függvénnyel sem tudod ezt meghatározni. Szerintem elsõlépésként el kéne gondolkodnod, milyen adatokat akarsz tárolni. második lépésként pedig milyen adatokra van szükéséged. Végül pedig Olyan adatbázis struktúrát kialakítani ami mind neked, mind pedig az adatbáziskezelõnek megfelel. Ha gondolod, küld el nekem, hogy milyen adataid vannak, és azokból mit akarsz kigyûjteni. Megpróbálhatom harmadik normálformára hozni. Szerintem arpsoft is segítene. De az nem jó ötlet, hogy még a css utasításokat is az adatbázisban tárolod! Azokat a felhasználás helyén is megadhatod. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 21, 2005 Azt nehezen. Valahogy el kell különítenem a keresztneveket a vezetéknevektõl, külön mezõkben meg nem tárolhatom õket, mert teljesen változó, hogy melyik rekordban hány név van, van-e egyáltalán. Ezért nehéz a kérdés. A normálforma-felajánlást köszönöm, de nem ott van a baj. Valahogy muszáj lesz megoldanom ezt a kérdést, mert ha sikerülne, akkor automatikusan generálódna rengeteg adat, amelyhez hozzá sem kellene nyúlnom azután. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 22, 2005 @mezofi: http://www.1keydata.com/sql/sqllike.html @google: Az lehet a gond, hogy nem pont úgy vannak beütve a nevek mindenhová, ezért a group nem tud rendesen dolgozni. Elõször az adataidat kellene egyformára szabni. Tehát ne forduljon elõ olyan, hogy van Kovács <span>Ernõ</span> Kovács<span> Ernõ</span> Kovács <span>Ernõ </span> mert ezek mindegyike más a group-nál, de a like megtalálja õket. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 22, 2005 Ilyen biztosan nincs. Mivel a keresztneveket [így] írom be, spanné php-kóddal alakítom, tehát biztosan nincs elütés. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 22, 2005 FoxPro-ban meg lehet oldani, így: select *,like("Kovács*Ernõ*",nev) as szuro,count(*) as elo from test group by szuro where like("Kovács*Ernõ*",nev) having count(*)>1 Hogy mySQL-ben lehet-e hasonlót, azt nem tudom. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 22, 2005 Meg fogom próbálni (a saját szintaktikájával persze ), hátha. Most már mindent megpróbálok. Link to comment Share on other sites More sharing options...
Mezofi 0 Share Posted November 23, 2005 @arpsoft Azt mondod, hogy a LIKE parancs kiadásával megtudod számoltatni egy mezõn belül hányszor van ismételve a keresett szó? Pl egy mezõ tartalma: " Tojást vennék, tojást keresek, tojás" Kiadod a LIKE"tojás" utasítást és az megmondja, hogy háromszor van beírva az adott mezõben? Szerintem csak megtalálja az adott mezõt, de, hogy hányszor ismétlödik benne a tojás szó, azt nem. A LIKE utasítás nem erre van kitalálva! Rövid pályafutásom alatt ilyenrõl nem hallottam, de azért lehet. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 23, 2005 De nem ez volt a feladat! A többször elõforduló neveket kellett megtalálni. Én úgy értettem, hogy a név egyszer megvan a 21. rekordban és a 44. rekordban, de a mezõkben a név mellett még másik név is szerepelhet. Tehát olyan rekord, hogy egy név kétszer szerepel egy mezõben nincs, mindig különbözõ nevek vannak. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 23, 2005 Akkor bizony Mezofi értette meg jól! Pontosan errõl van szó, hogy ...amely megmondja, hogy a mezõben többször szerepel-e ugyanaz a karakterlánc. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 23, 2005 Na ilyen sql utasítás nincs. Ebben az esetben át kéne alakítani a tábládat. Kéne csinálni egy relációt a következõ módon: a jelenlegi tábládban szerintem van egy mezõ, amivel a rekordokat egyértalmûen tudod azonosítani, tehát valamilyen id. Ha nincs, akkor csinálj egyet. A neveket rakjad át egy másik táblába, aminek két mezõje van, az egyik az elõbb említett id a másik a név, amiben csak egy név fog szerepelni. Ezek után bármikor elõállíthatod egy rövid kóddal az eredeti táblád tartalmát is az új tábla lekérdezésével, mivel az id mezõ összekapcsolja õket. A számlálást pedig egy egyszerû sql utasítás elvégzi: select id, nev, count(*) as elofordulas from nevek group by id Ha csak azokat szeretnéd látni, amibõl több is van, akkor: select id,nev,count(>) as elofordulas from nevek group by id having count(*)>1 Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 23, 2005 Köszönöm a tanácsot, de ez nem járható út sajnos, mivel teljesen eltérõ mennyiségû név szerepelhet 0-tól akár 10-ig is, borzasztóan felesleges volna megalkotni egy tízoszlopos táblát, csak azért, mert egyetlen rekordnak 10 mezõje van. Azt hiszem, átgyúrom a dolgot úgy, hogy php-val próbálom megkeresni, az adott mezõben hányszor szerepel ugyanaz a string. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 23, 2005 De nem kell ilyen tábla! Most valami lyened van: 1. blablablabla ejnyebejnye blablablabla almafaalmafa 2. blablablabla almafaalmafa ejnyebejnye Az átalakítás során ilyen lenne az egyik tábla: 1. 2. Ilyen a másik: 1. blablablabla 1. ejnyebejnye 1. blablablabla 1. almafaalmafa 2. blablablabla 2. almafaalmafa 2. ejnyebejnye Mindkét táblának határozott szerkezete van. Tessék a fejekbõl kiverni már a táblázatokat! Az adatbázis az nem Excel. Link to comment Share on other sites More sharing options...
Mezofi 0 Share Posted November 23, 2005 Ha jól emlékszem én is a táblák újragondolását javasoltam. Az adatbázis egyik lényege, hogy amenyire lehet kerüljük a redundanciát ( bocsi, ismétléseket). Tehát azt eleve kerülni kell, hogy egy mezõben szerepeljen akár kétszer is ugyanaz az adat! arpsoft is azt tanácsolja, hogy azonosítókkal kell hivatkozni a többször elõforduló adatokra. Ui: Mindent lehet csak akarni kell! @google Nem akarok pesszimista lenni, de azt is mondtam, hogy php sztring függvénnyel sem tudod megszámolni! ír: Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 24, 2005 Teljesen igazad van. Ha ez a feladat, akkor nincs másik megoldás. Szerintem. Persze mindent le lehet kódolni, csak kérdés megéri-e. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted November 24, 2005 Szerintem jobban megéri, mint a tábla, mert minden egyes névhez tartozik egy szám is, ami - mivel fociról van szó - 1-90-ig bárhol lehet, és elég valószínûtlen, hogy ismétlõdne a névvel együtt. Persze el lehet tárolni a számokat is külön táblában , de az már eléggé az ágyúval verébre eset. ír: Ráadásul sokkal több új név van, mint amennyi összesen ismétlõdik. Azokat mind fel kell venni az adatbázisba, stb. ... Az substr_count függvény miért nem jó? Link to comment Share on other sites More sharing options...
Mezofi 0 Share Posted November 25, 2005 Beleszaladtam egy olyan lekérdezésbe amit még nem csináltam. Van két tábla, egyben a termék nevek és a tkod mint kapcsoló mezõ. A másikban a termék eladások darabszámai és a tkod. Összekötöm, eddig megy, szeretném lekérdezni melyik termékbõl mennyit értékesítettem. De az eladas táblában szétszórva vannak a tkod-ok és a mennyiségek. ORDER BY-al szépen összerendeztem és egymás alatt látom a termékek eladásait, de egymás alatt mondjuk ötször fel van sorolva ugyanaz a termék, persze mert ötször adtam el belöle. Azt kérdezném, hogyan tudom elérni, hogy termék kódonként összesítse az eladásokat. Lehet, hogy belsõ SELECT-et kell használni? Rémlik valami a COUNT-ról és a GROUP BY-ról, de nem tudom öszehangolni. Most ez a kód, ami eladásonként sorolja fel. $eladasok=mysql_query("SELECT eladas.tkod,termek.tnev, eladas.menny FROM eladas,termek WHERE eladas.tkod=termek.tkod ORDER BY termek.tnev"); ír: Ui: Na, megvan! $eladasok=mysql_query("SELECT termek.tnev,eladas.tkod,SUM(eladas.menny) FROM eladas,termek WHERE termek.tkod=eladas.tkod group by tkod order by tnev"); Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted November 26, 2005 Látod, megy ez! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now