GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: tudvari - 2014. január 03. - 22:11:47

Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 03. - 22:11:47
Sziasztok!
Telefonrendszert szeretnék csinálni,és arra lennék kíváncsi,hogy MySQL-el hogy oldhatom meg azt,hogy olyan számot adjon a játékosnak,ami még egy sorban sincs?
Telefonszam értéke egy random 4 jegyû szám legyen,és ne egyezzen meg egyetlen egy sor Telefonszam váltózójának értékével.
Eddig dinivel oldottam meg,és ott mûködött,de most át kell írnom a modomat MySQL-re,és itt megakadtam.
Elõre is köszönöm.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 04. - 13:33:26
Ezt még egyszer PHP-ban csináltam, amikor ki kellett írni néhány random számot, melyek nem lehettek ugyanazok. Átírtam pawn nyelvre, na meg a te kérésedhez illõre, remélem mûködni fog, és hasznát veszed a dolgoknak. Ha átírás közben elírtam valamit, ez van, sajnálom, de a lényegét érteni fogod a kódnak, és sikerül majd megoldanod a problémádat.
 
new Szam = // Itt csináld meg a random 4 jegyû számot!
format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Tabla\"); // Lekérdezés formázása
mysql_query(mysql_string); // Lekérdezés
mysql_store_result();
while(mysql_fetch_row(mysql_line)) // Megnézzük az összes találatot
{
if(Szam == strval(mysql_line)) // Ha a szám nem egyezik meg vele, nem történik semmi, azonban ha igen...
{
new i, Joszam;
for(i = 0; Joszam != 1; i++) // ...elindul ez a for ciklus. Addig ismétlõdik, ameddig a Joszam értéke 1 nem lesz
{
   Szam = // Ide írd le megint azt, amivel megcsinálod a random 4 jegyû számot! Ezzel egy új számot kérve
   if(Szam != strval(mysql_line)) // Amennyiben nem egyezik meg a Szam, és a találat értéke, a Joszam értéke 1 lesz, így nem folytatódik tovább a ciklus a végtelenségig, ismét új számot kérve
   {
      Joszam = 1;
   }
}
}
}
mysql_free_result(); // Felszabadítod az erõforrást
// Itt már a Szam értékbe biztosan nem fog megegyezni más telefonszámok értékével. Ha egyszerre több játékos használja a dolgot, érdemes rá tenni egy playerid-s tömböt.
// Frissíted az adatbázist, vagy amit akarsz csinálni, például:
format(mysql_string, sizeof(mysql_string), \"UPDATE Tabla SET Teloszam = \'%d\' WHERE Nev = \'%s\'\", Szam, Nev(playerid));
mysql_query(mysql_string);

 
Utóirat: végre egy értelmes, gondolkodtató segítségkérés :)
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Pedró - 2014. január 04. - 13:35:23

Ezt még egyszer PHP-ban csináltam, amikor ki kellett írni néhány random számot, melyek nem lehettek ugyanazok. Átírtam pawn nyelvre, na meg a te kérésedhez illõre, remélem mûködni fog, és hasznát veszed a dolgoknak. Ha átírás közben elírtam valamit, ez van, sajnálom, de a lényegét érteni fogod a kódnak, és sikerül majd megoldanod a problémádat.
 
new Szam = // Itt csináld meg a random 4 jegyû számot!
format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Tabla\"); // Lekérdezés formázása
mysql_query(mysql_string); // Lekérdezés
mysql_store_result();
mysql_fetch_row(mysql_line);
while(mysql_fetch_row(mysql_line)) // Megnézzük az összes találatot
{
if(Szam == strval(mysql_line)) // Ha a szám nem egyezik meg vele, nem történik semmi, azonban ha igen...
{
new i, Joszam;
for(i = 0; Joszam != 1; i++) // ...elindul ez a for ciklus. Addig ismétlõdik, ameddig a Joszam értéke 1 nem lesz
{
   Szam = // Ide írd le megint azt, amivel megcsinálod a random 4 jegyû számot! Ezzel egy új számot kérve.
   if(Szam != strval(mysql_line)) // Amennyiben nem egyezik meg  a Szam, és a találat értéke, a Joszam értéke 1 lesz, így nem folytatódik tovább a ciklus a végtelenségig, ismét új számot kérve
   {
      Joszam = 1;
   }
}
}
}
mysql_free_result(); // Felszabadítod az erõforrást
// Itt már a Szam értékbe biztosan nem fog megegyezni más telefonszámok értékével. Ha egyszerre több játékos használja a dolgot, érdemes rá tenni egy playerid-s tömböt.
// Frissíted az adatbázist, vagy amit akarsz csinálni, például:
format(mysql_string, sizeof(mysql_string), \"UPDATE Tabla SET Teloszam = \'%d\' WHERE Nev = \'%s\'\", Szam, Nev(playerid));
mysql_query(mysql_string);

 
:)
 
[/quote]
Ennek semmi értelme.
Egyébként azt honnan veszed, hogy milyen típusú MySQL plugint használ?

Dupla hozzászólás automatikusan összefûzve. ( 2014. január 04. - 13:36:21 )

tudvari, elkészítetted már a MySQL tábláját a telefonrendszernek, amelyben tárolni fogod a telefonokat / telefonszámokat?
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 04. - 13:38:38
Dehogyis nincs értelme. Az egy dolog, hogy te nem tudod értelmezni. A lekérdezéseket pedig átalakítja magának. Az sem biztos, hogy így kell lekérdezni pawn-ban, már rég foglalkoztam vele, mostanában csak PHP-ban volt szükségem MySQL-ra :D
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 04. - 13:40:50
Ilyen verziójú MySQL-t használok.Köszi szépen,majdm egnézem,hogy jó-e.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Pedró - 2014. január 04. - 13:51:49
Idézetet írta: Dfoglalo date=1388839118\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"45646\" data-ipsquote-contentclass=\"forums_Topic
Dehogyis nincs értelme. Az egy dolog, hogy te nem tudod értelmezni. A lekérdezéseket pedig átalakítja magának. Az sem biztos, hogy így kell lekérdezni pawn-ban, már rég foglalkoztam vele, mostanában csak PHP-ban volt szükségem MySQL-ra :D
 
Állj. Honnan veszed, hogy én nem tudom értelmezni, és mire fel vagy ebben olyan biztos?
Elõszöris ha már annyira biztos vagy a kódodba, közlök veled pár hibát..
1.: Mi a francnak kérdezed le az elsõ sornak a értékeit, azelõtt, hogy az összeset lekéred ciklusba?
 
mysql_fetch_row(mysql_line);
while(mysql_fetch_row(mysql_line)) // Megnézzük az összes találatot

 
Helyes:
 
while(mysql_fetch_row(mysql_line))

 
2.: Minek kell formázni a karakterláncot? Nincs szükség rá..
 
format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Tabla\"); // Lekérdezés formázása
mysql_query(mysql_string); // Lekérdezés

 
Helyes:
 
mysql_query(\"SELECT Teloszam FROM Tabla\"); // Lekérdezés

 


Szerintem egy jó megoldás:
 
new szam;
mysql_query(\"SELECT FLOOR(RAND() * 9999) AS random_num FROM Tabla WHERE \'random_num\' NOT IN (SELECT Teloszam FROM Tabla) LIMIT 1\");
mysql_store_result();
szam = mysql_fetch_int();
mysql_free_result();
printf(\"A telefonszám: %i\");

 
Az SQL kódot írta: Tushar, átalakította: Pedró.
(nos abban nem vagyok biztos, hogy 4 számjegyû lesz.)
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 04. - 13:59:53

Állj. Honnan veszed, hogy én nem tudom értelmezni, és mire fel vagy ebben olyan biztos?
 
[/quote]
Onnan, hogy azt mondtad rá:
 

Ennek semmi értelme.
 
[/quote]
;)
 

1.: Mi a francnak kérdezed le az elsõ sornak a értékeit, azelõtt, hogy az összeset lekéred ciklusba?
 
mysql_fetch_row(mysql_line);
while(mysql_fetch_row(mysql_line)) // Megnézzük az összes találatot

 
Helyes:
 
while(mysql_fetch_row(mysql_line))

 

[/quote]
Véletlenül maradt ott, amikor gondolkoztam, hogy is nézne ez ki pawn nyelven. Köszönöm, hogy észrevetted, javítom. :)
 

2.: Minek kell formázni a karakterláncot? Nincs szükség rá..
 
format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Tabla\"); // Lekérdezés formázása
mysql_query(mysql_string); // Lekérdezés

 
Helyes:
 
mysql_query(\"SELECT Teloszam FROM Tabla\"); // Lekérdezés

 

[/quote]
Tényleg nem muszáj, de mint mondtam, régen foglalkoztam már vele pawn nyelven. Tényleg nem szükséges, ez igaz. :) De attól még nem A \"Helyes:\" a második megoldás, hanem az IS egy megoldás. :)
De ez most nem arról szólt, hogy egy egy ilyen apróság hogy van e megoldva, hanem arról, hogy maga az összehasonlítás meg legyen oldva.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Pedró - 2014. január 04. - 14:10:05
Az sem jó szerintem.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 04. - 14:35:19
Ha esetleg elrontottam volna itt, pawn nyelvben, itt a PHP kód átirata egy darab teszt PHP fájlba, melyben a változók nevét átírtam a teszt fájlhoz, melyet rengetegszer újratöltöttem, és sosem kaptam ugyanazt a 2 számot. De ettõl függetlenül magának az elvnek mûködnie KELL, legyen szó bármely nyelvrõl, bármilyen értékadási módszerrõl, akár MySQL-os lekérdezésrõl, habár szerintem a pawn nyelves átiratom sincs elrontva. :)
<?php$Szam1 = rand(1, 4);$Szam2 = rand(1, 4);if($Szam1 == $Szam2){   for($i= 0; $Joszam != 1; $i++)   {      $Szam2 = rand(1, 4);      if($Szam2 != $Szam1)      {         $Joszam = 1;      }   }   $Joszam = 0;   echo \'Amennyiben ezt az üznetet látod, eleinte ugyanaz a két szám lett legenerálva.
Ezek után persze nem lenne szabad a szöveg alatt ugyanazt a két számot látnod.
\';}echo $Szam1;echo \'
\';echo $Szam2;?>
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 04. - 15:22:49
undefined symbol \"mysql_line\"
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 04. - 15:25:15
Az csak egy változó, amelyben stringet tárolsz :D Át is nevezheted tõlem, egy meglévõre, de ha ezt szeretnéd használni, akkor tessék:
 
new mysql_line[128];

 
Habár azt hittem, ezen nem akadsz fent :D


Edit: kicsit felfrissítettem a pawn nyelvi MySQL tudásomat, és most látom, hogy elméletileg használhatsz mysql_fetch_int(mysql_line)-et is, és akkor csak simán egy int, lásd:
 
new mysql_line;

 
változót kell létrehoznod.
És akkor a strval függvény sem fog kelleni.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 04. - 17:10:11
Köszi,próbálkoztam a megoldásával,de attól,hogy nem ír ki errort,az még jelenti azt,hogy jó,így inkább kiírtam ide :D
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Pedró - 2014. január 04. - 23:08:52
Próbáltad az én megoldásomat?
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 04. - 23:31:34
Azzal az a baj,hogy nem értem,hogy pontosan mi is folyik ott.Nem akarok olyan scriptet használni,amiben nem tudom,hogy mirõl van szó.Ha részletesen le tudnád írni,akkor biztos használnám :D
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Dfoglalo - 2014. január 05. - 14:46:15
A megoldásom elvét érted? Ha nem, a php kód alapján próbáld megérteni, és ha érted, akár saját magadnak is meg tudod írni pawn nyelven, mert lehet, hogy az átirat nem a leg mûködõbb.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: tudvari - 2014. január 05. - 14:59:41
A tiédet értem,csak Pedróét nem.
Cím: MySQL - Olyan változó megadása,ami még egy sorban sincs
Írta: Pedró - 2014. január 05. - 16:56:48
Lényegbe én se értem az SQL kód értelmét. Lényegébe csak vissza ad egy 4 jegyû számot, amely nem szerepel egyetlen sorban sem. Ennyirõl szól. Mûködési elvérõl fogalmam sincs, mint közöltem, nem én írtam.