Szerző Téma: SQL, MySQL  (Megtekintve 224760 alkalommal)

0 Felhasználó és 1 vendég van a témában

Nem elérhető manoman

  • Felhasználó
  • Hozzászólások: 4
  • Karma: 0
Re: SQL, MySQL
« Válasz #2266 Dátum: 2009. november 28., 13:40:23 »
Hasznos volt ez a hozzászólás? 0
Megint visszatértem , hátha itt kapok válasz, vagy msn címet , a joomla téma offol , ahogy látom.:(

A konkrét problémám annyi , hogy van egy komponens(joomla)  ,amit megkreáltam.

Ebben lehet közzétenni termékeket .
A termékre kattintva kap egy leírást az olvasó.
ide szeretnék még integrálni az ún. jellemzők lapra két funkciót:
1.minden termékhez saját foto galéria
2.minden termékhez saját video galéria.

egyenlőre ennyi.
Mivel elég kezdő vagyok a témában  , tanácsot kérnék , hogy megy ez .

Elküldve:: 2009. November 28.  13:34:44
a veleje:

minden termék jellemzői egy táblában vannak.
én találtam egy -egy scriptet, ami külön-külön képes katalogizálni.(kép,  video).

De azt nem tudom , hogy hogy lehetne megvalósítani a kapcsolatot a több rész között

az admin 

Elküldve:: 2009. November 28.  13:37:38
az admin részen kellene feltöltsem a videót a komponensemen keresztül( plusz egy item a formmba)

viszont külön adatbázisban szeretném tárolni a képeket és a videókat is.
mit tanácsoltok , hogy essek neki ?
Annyit tudok , hogy az elsődleges kulcsa a terméknek az id , gondolom ehhez kell kapcsolni a másik táblákat, hogy menjen .

Remélem , elég közérthető voltam , és nem dobtok le a monológom miatt.

Köszönöm .


Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2265 Dátum: 2009. november 28., 12:28:35 »
Hasznos volt ez a hozzászólás? 0
Ebben van valami :D Ezt sehogy nem tudom megérteni hogy mire számít az aki beküldi hogy problémája van, de semmit nem mond hogy pontosan mi, így nem tudunk segíteni :)

Nem elérhető Metts

  • Törzstag
  • **
  • Hozzászólások: 496
  • Karma: +18
    • -
Re: SQL, MySQL
« Válasz #2264 Dátum: 2009. november 28., 11:19:07 »
Hasznos volt ez a hozzászólás? 0
Hát írd le ide a problémádat és mi segítünk:)

Nem elérhető manoman

  • Felhasználó
  • Hozzászólások: 4
  • Karma: 0
Re: SQL, MySQL
« Válasz #2263 Dátum: 2009. november 28., 11:04:08 »
Hasznos volt ez a hozzászólás? 0
Sziasztok!

Php gurut keresek , aki segítene nekem .adatbázis probléma , (elég kezdő vagyok benne)

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2262 Dátum: 2009. november 27., 21:49:07 »
Hasznos volt ez a hozzászólás? 0
JAj aham, mostmár értem, de közben módosítottam az előző hsz-em, és abban írtam még pár dolgot, szóval most nem igazán szeretném elbizgeerálni amíg megy, max annyit hogy még utánajárok mégegyszer a változóknak :)
De azért nagyon köszi mégegyszer!!! :D

Na mégegyszer :)
És még egy hiba megvan a time dologgaL :)
Na szóval azt csináltam hogy a time>$t helyett time<$t és $t = time(); ez most jó, és a time -ba pedig nem az akkori időt mentem, hanem hogy akkori + aktívnak számít idő -t mentem a time mezőbe, és amikor az aktuális idő nagyobb mint amennyi ideíg aktív volt, na akkor törli, így már tényleg jól megy !!!
Köszönök mindent! :)
U.I.: Ja és akit érdekelne, a user_a azért kellett, hogy a saját gépemen is tesztelhessem hogy valaki online -e, meg hát más gépről ugyan ezzel az ip-vel, és más böngészővel, mert mivel nálunk a hálózatban 1 ip -van, ezért nem ment amikor apám gépén is behoztam az ldalt, így már menne ha más böngészőben nyitom meg. :)
« Utoljára szerkesztve: 2009. november 27., 22:05:53 írta tbence »

Nem elérhető Rimelek

  • Adminisztrátor
  • Őstag
  • *****
  • Hozzászólások: 9.031
  • Karma: +288
    • rimelek.hu
Re: SQL, MySQL
« Válasz #2261 Dátum: 2009. november 27., 21:41:43 »
Hasznos volt ez a hozzászólás? 0
Nem két elsődleges kulcs kel, hanem egy összetett. A kulcs módosításkor megadhatsz újabb mezőket. Nem új kulcsot kell létrehozni. SQL-ben igy nézne ki:

Kód: SQL
  1. CREATE TABLE IF NOT EXISTS `teszt` (
  2.   `id` INT(11) NOT NULL,
  3.   `szoveg` VARCHAR(40) NOT NULL,
  4.   `id2` INT(11) NOT NULL,
  5.   PRIMARY KEY (`id`,`id2`)
  6. )
Egyszerűen létezem, és lézengek a Földön,
mint idióta szellem, kinek kastélya a börtön.

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2260 Dátum: 2009. november 27., 21:32:51 »
Hasznos volt ez a hozzászólás? 0
Hát kezdjük ott mostmár értem mit akarsz, és értem kb mire lenne jó, de nem enged 2 elsődleges kulcsot megadni...
Amúgy meg hiába van ez, nem értem hogy miért nem működik az aminek meg kéne... szóval nem tudom mit kezdjek vele, majd esetleg ha a hétvégén kipihenm magam újra nekilátok megoldani a dolgot, azért köszönöm hogy igyekeztél segíteni ! :)

Huh... Na utolsó kis erőmmel azért még is csak neki álltam mégegyszer a hibakeresésnek, változó vizsgálatnak, stb stb...
Végül addig fajultam, hogy minden változót, aholcsak lehetett lecseréltem az eredetire... (pl $time = time() helyett a time() -t használtam közvetlenül.)
És stb és stb... de végül sikerült megoldani, hogy jól vizsgálja a dolgokat, és hogy törölje a sort ami nem kell, és hogy ne törölje amit nem kell, és hogy ha nincs hozzon létr sort, ha van akkor pedig frissítse azt, a kód a változókat leszámítva nem változott, csak azt nem értem hogy akkor mi baja lehetett, minden esetre külön külön megvizsgáltam minden kis lekérést és végül is most megy :)
Szóval örülök hogy sikerült :) köszönöm a segítséegt! :)

Azért berakom ide a kódot ha valaki nem értené vagy kiváncsi lenne mi változott:
Kód: PHP
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $user_a = $_SERVER['HTTP_USER_AGENT'];
  3. $t = time()+900;
  4.  
  5. $sql = "DELETE FROM ".$_CONF['ONLINE']." WHERE time>".$t."";
  6. mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  7.  
  8. $sql = "SELECT * FROM ".$_CONF['ONLINE']." WHERE ip='".$ip."' AND user_a='".$user_a."'";
  9. $a = mysql_query($sql);
  10. $er  = mysql_fetch_array($a);
  11.  
  12. if( mysql_num_rows($a) == 0 ){
  13.   $sql = "INSERT INTO ".$_CONF['ONLINE']."(time,ip,user_a) VALUES ('".time()."','".$ip."','".$user_a."')";
  14.   mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  15. }else{
  16.   $sql = "UPDATE ".$_CONF['ONLINE']." SET time='".time()."' WHERE ip='".$ip."' AND user_a='".$user_a."'";
  17.   mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  18. }
  19.  
  20. $sql = "SELECT COUNT(*) FROM ".$_CONF['ONLINE']."";
  21. $online = $er;
  22.  

Még kivizsgálom jobban, mert kiváncsi vagyok, de azért megnézem mégegyszer azt a time() -os dolgot mert én nagyon arra gyanakszom, pedig jó kellett volna legyen : :dry: Na de sebaj a lényeg jhogy megy és hogy köszönöm a kitaró segítséget!!! :)
« Utoljára szerkesztve: 2009. november 27., 21:47:26 írta tbence »

Nem elérhető Rimelek

  • Adminisztrátor
  • Őstag
  • *****
  • Hozzászólások: 9.031
  • Karma: +288
    • rimelek.hu
Re: SQL, MySQL
« Válasz #2259 Dátum: 2009. november 27., 21:22:08 »
Hasznos volt ez a hozzászólás? 0
A time mezőbe mit írsz? Azt az időt, amikor belépett a user, vagy azt, amikor ki kell törölni?


Összetett kulcsot úgy tudsz készíteni myadminban, hogy belépsz a táblába. ott a szerkezet fület választod.
Ott pedig alul kell lennie egy "részletek" linknek. Vagy az is lehet, hogy eleve megjelenik az "indexek" szekció.
Vagy ott van már egy primary key, vagy nincs. Attól függően, hogy létrehoztál-e a táblában elsődleges kulcsot, vagy sem. Ha létrehoztál, akkor előbb töröld. És vedd fel a user_a és ip mezőket. Vagy csak módosítsd a ceruza ikonnal.

Akkor nem a szokványos integer azonosító lesz a sornak, hanem két értéktől fog függeni. Ezen két értékek együtt határozzák meg a sor egyediségét. Nem lehet két olyan sor, ahol mindkét kulcs mező azonos. De ha csak az egyik más, akkor lehet. Mondjuk a user_agent -et lehet módosítani, így ezzel át lehet verni az online listát. Szóval akár nem is kéne törődni azzal a mezővel. Max plusz információ lehetne. De ha meg akarod tartani, akkor ezen az adatszerkezeten működik a replace utasítás, illetve a másik módszer, amit mutattam. Egy normál insert utasítás, aminek megadod, hogy ha mégis duplicate key lenne, vagyis lenne két olyan sor, ahol mindkét kulcs mező megegyezik, akkor mégse inserteljen, hanem updateljen. És a lenti mintára az update után már nem kell a set kulcsszó. Csak a mezőnevek, és mögöttük az értékek, amire updateled. Ami jelen esetben azonos azzal, amit insertbe írtál. A replace utasítással pedig ugyanúgy írhatod meg az sql-t, mint az insert-et. Csak az insert szót cseréld le replace -re.
Egyszerűen létezem, és lézengek a Földön,
mint idióta szellem, kinek kastélya a börtön.

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2258 Dátum: 2009. november 27., 20:28:08 »
Hasznos volt ez a hozzászólás? 0
Na a $time az pont kilóg a részletből: de $time = time(); :)
Ezt az összetett elsődleges kulcsot még meg kell rágnom, mire megértem, de még gondolkozom rajta hogy mit akarsz vele mondani :)
Addíg is köszi! :)

Hát most nézegetem a PHPMyAdmin-t, meg a kódot, de nm igazán értem hogy mégis mi ez mire jó meg hogy kellene megvalósítani ezt az összetett elsődleges kulcsot. :(

Amúgy most közben még valamit nem értek, pedig ennek kéne mennie a leginkább.  :dry:
Nem törli azokat a sorokat, ahol a time>$t :( Pedig $t 100000% hogy nagyobb mint time mező értéke... :(
« Utoljára szerkesztve: 2009. november 27., 20:35:48 írta tbence »

Nem elérhető Rimelek

  • Adminisztrátor
  • Őstag
  • *****
  • Hozzászólások: 9.031
  • Karma: +288
    • rimelek.hu
Re: SQL, MySQL
« Válasz #2257 Dátum: 2009. november 27., 19:12:33 »
Hasznos volt ez a hozzászólás? 0
Én hibát nem igazán látok. De a $time változó honnan jön? Megnézted, a változók mit kapnak?
Illetve nem kell ellenőrizned sem semmit, ha a user_a és az ip mezőket egy összetett elsődleges kulcsként definiálod a táblában. És akkor használhatod a replace utasítást.

Ami tulajdonképpen ennyit tesz:

Kód: SQL
  1. INSERT INTO tabla (id,id2,szoveg) VALUES(1,2,'tartalom')
  2.   ON duplicate KEY UPDATE szoveg='tartalom'

Lényege, hogy ha már létezik az az elsődleges kulcsú sor, akkor frissíti. Egyébként beszúr egy újat.
Egyszerűen létezem, és lézengek a Földön,
mint idióta szellem, kinek kastélya a börtön.

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2256 Dátum: 2009. november 27., 18:13:27 »
Hasznos volt ez a hozzászólás? 0
Jaj bocsi közben átszerkesztettem, mert nem megy ígysem úgy sem.

Nem elérhető Metts

  • Törzstag
  • **
  • Hozzászólások: 496
  • Karma: +18
    • -
Re: SQL, MySQL
« Válasz #2255 Dátum: 2009. november 27., 18:08:01 »
Hasznos volt ez a hozzászólás? 0
Hát én csak ezt használom:  :) Ugye még van a lekérdezésbe beépülő COUNT függvény is, de én azt nem szeretem használni,  de sajnos mysqli-n ezt kell hasznáni  :dontgetit:



Vuu de nem tok fogalmazni.

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2254 Dátum: 2009. november 27., 18:04:36 »
Hasznos volt ez a hozzászólás? 0
Most már elegem van belőle nem tudom mi baja, de nem úgy megy, ahogy (szerintem) mennie kéne...
Itt a kód:

Kód: PHP
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $user_a = $_SERVER['HTTP_USER_AGENT'];
  3. $t = $time+$_CONF['ONL_TIME'];
  4.  
  5. $sql = "DELETE FROM ".$_CONF['ONLINE']." WHERE time>". $t ."";
  6. mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  7.  
  8. $sql = "SELECT * FROM ".$_CONF['ONLINE']." WHERE ip='".$ip."' AND user_a='".$user_a."'";
  9. $a = mysql_query($sql);
  10. $er  = mysql_fetch_array($a);
  11.  
  12. if( mysql_num_rows($a) == 0 ){
  13.   $sql = "INSERT INTO ".$_CONF['ONLINE']."(time,ip,user_a) VALUES ('".$time."','".$ip."','".$user_a."')";
  14.   mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  15. }else{
  16.   $sql = "UPDATE ".$_CONF['ONLINE']." SET time='".$time."' WHERE ip='".$ip."' AND user_a='".$user_a."'";
  17.   mysql_query($sql,$kapcsolat) or die("Hiba: ".mysql_error());
  18. }
  19.  
  20. $sql = "SELECT COUNT(*) FROM ".$_CONF['ONLINE']."";
  21. $online = $er;

Ennek szerintem azt kéne tennie, hogy ha van már ip = $ip , és $user_a = $user_a sor, akkor csak azt frissíti, és ha nincsen, akkor létrhozza.
De ehelyett vagy mindíg létrhooz, vagy Nem csinál semmit, vagy ... szóval nem tudom mi a baja. Valaki tudna segíteni, ha szépen megkérem?
« Utoljára szerkesztve: 2009. november 27., 18:12:49 írta tbence »

Nem elérhető Metts

  • Törzstag
  • **
  • Hozzászólások: 496
  • Karma: +18
    • -
Re: SQL, MySQL
« Válasz #2253 Dátum: 2009. november 27., 18:01:30 »
Hasznos volt ez a hozzászólás? 0
mysql_num_rows()
Kód: PHP
  1. if(mysql_num_rows($lekeres) > 0)
  2. {
  3.    print 'teljesül';
  4. }
  5. else
  6. {
  7.   print 'NEM';
  8. }

Nem elérhető tbence

  • Globális moderátor
  • Teljes tag
  • *****
  • Hozzászólások: 1.154
  • Karma: +25
    • TBence.hu
Re: SQL, MySQL
« Válasz #2252 Dátum: 2009. november 27., 17:37:28 »
Hasznos volt ez a hozzászólás? 0
Ismét én.
Ezzel most mit kezd? ezt is próbáltam, de össze vissza csinálta a dolgokat...
Kód: PHP
  1. $sql = "SELECT * FROM ".$_CONF['ONLINE']." WHERE ip='".$ip."' AND user_a='".$user_a."'";
  2.  
  3. if( !isset($er['ip']) && !isset($er['user_a']) ){
  4.  
Ez most akkor teljesül, ha nem talált olyan sort a táblában, amiben az id = $id, és user_a = $user_a volt?
Legalább is nekem most ez lett volna a célom. csak nem igazán sikerült, megpróbáltam még fetch_assoc-al is, de úgy sem azt hozta össze amit szerettem, volna (akkor az if is más volt ! nem azzal volt a gond...)
Szóval hogyan lehetne megoldani, hogy akkor teljesüljön az if ha nem talált olyan sort mire a fentiek teljesültek?
Vagy legalább is hogyan lenne célszerű.