-
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.
-
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 :)
-
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?
-
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
-
Ilyen verziójú MySQL-t használok.Köszi szépen,majdm egnézem,hogy jó-e.
-
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.)
-
Á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.
-
Az sem jó szerintem.
-
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;?>
-
undefined symbol \"mysql_line\"
-
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.
-
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
-
Próbáltad az én megoldásomat?
-
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
-
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.
-
A tiédet értem,csak Pedróét nem.
-
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.