SELECT * FROM `tablename` ORDER BY RAND() LIMIT 20
Nem okoskodásként de ez így szerintem visszatérhet azonos kérdésekkel, ha pont véletlen ugyanazok a számok sorsolódnak ki.
Így 100% hogy nem lesz két egyforma:
SELECT DISTINCT * FROM `tablename` ORDER BY RAND() LIMIT 20
Nem okoskodásként de ez így szerintem visszatérhet azonos kérdésekkel, ha pont véletlen ugyanazok a számok sorsolódnak ki.
Így 100% hogy nem lesz két egyforma:
SELECT DISTINCT * FROM `tablename` ORDER BY RAND() LIMIT 20
Sose volt egyforma tudomásom szerint, de utána fogok nézni.
Mivel pontosan azért lassú ez a fajta rand lehetõség mysql-ben mert az egész adattábla adatait véletlenszerûen elrendezi és úgy térne vissza az összes sorral, de csak 20 sor adattal tér vissza mert limitnek ennyi van megadva, talán ha kevesebb adatsor van benne mint a limit akkor lenne benne egyezés de még akkor se hiszem.
@Dexter95
Jó akkor le kellene szedned egy mysql plugint, és installálnod kellene a samp szerveredhez (csak be kell másolni a megfelelõ helyre9 de mivel linux pár verziót lehet le kell töltened hogy valamelyiket gond nélkül betöltse a sa-mp szervered.
http://forum.sa-mp.com/showthread.php?t=56564
https://code.google.com/p/sa-mp-mysql-plugin/
Ui.:
A pawn kódot meg megírom lehet még ma este, de csak beolvasás részt.
Edit:
OnGameModeInit alá vagy OnFilterScriptInit alá:
new
Mod_CH;
Mod_CH = mysql_connect(.......); // Ide be kell írni a csatlakozási adatokat, phpmyadminon látnod kell ÁLLAPOT FOLYAMATOK-nál a csatlakozott állapotot ha fut a szervered, persze a sa-mp szerver is írni fogja több helyen is ha beleírod de mysql_log.txt fájl biztosan jelzi. (sa-mp szervered mellett fogod találni a plugin hozza létre)
// Jelenleg sajnos csak egy csatlakozással mûködik a mysql plugin de most kicsit nagyon bezavarták a native kódokat, a plugin-t fejlesztik remélhetõleg jelenleg is, ezért nem árt vissza vissza nézni újabb verzióért.
Ahol meghívásra kerül a dolog oda kell ezt írni:
mysql_tquery(Mod_CH, \"SELECT * FROM `tablename` ORDER BY RAND() LIMIT 20\", \"THREAD_loadranddata\", \"\", \"\"); // olyan kérés mely egy új visszatérésbe küldi az adatokat (több szálon futó program ha a processzor magok száma lehetõvé teszi (kevesebb lagg meg bla bla bla ) meg kell szokni a használatát. :D
forward THREAD_loadranddata(); // Thread több szálon futó visszahívás mely nem laggoltatja a szervert, háttérben fut, ha készen vannak az adatok akkor kerül meghívásra ez a visszahívás
public THREAD_loadranddata()
{
new
rows,
fields;
cache_get_data(rows, fields, Mod_CH); // sorok illetve mezõk számának lekérése
new
ID,
str1[32], // Kérdés tárolása (karakterlánc (31 + NULL karakter) persze növelni kell ha több az adatbázisban
str2[32],
str3[32],
megoldas;
if(rows) // Van-e adatsor?
{
for(new i; i < rows; i++) // végig megyünk az összes visszatért adatsoron
{
// ID = cache_get_row_int(i, 0, Mod_CH); // Ha kell egyáltalán.
cache_get_row(i, 1, str1, Mod_CH, 32); // (i)sor , (1)mezõ (gondolom elsõ kérdés mezõszáma a második mezõ lehet, az elsõ mezõszám a mysql id), (str1)változó a kérdésnek, (Mod_CH)csatlakozás azonosító, (32)változó mérete
cache_get_row(i, 2, str2, Mod_CH, 32);
cache_get_row(i, 3, str3, Mod_CH, 32); // Figyelni kell hogy létezzen is mysql-ben mezõ 3-dik (vagy negyedik vagy több), ha nincs, szerver összeomlás is lehet.
megoldas = cache_get_row_int(i, 4, Mod_CH);
//persze lehet másképp is:
// cache_get_field_content(i, \"kerdes1\", str1, Mod_CH, 32);
// cache_get_field_content(i, \"kerdes2\", str2, Mod_CH, 32);
// cache_get_field_content(i, \"kerdes3\", str3, Mod_CH, 32);
// megoldas = cache_get_field_content_int(i, \"valasz\", Mod_CH);
printf(\"%d | %s | %s | %s | %d\", ID, str1, str2, str2, megoldas);
}
} else print(\"nincs adatsor !!!!\");
return 1;
}
Kipróbáltam, de sajna nem mûködik. valamiért nem jó a lekérdezés, mert kivágja, hogy nincs adatsor.
Becsatlakozik egyébként MySQL-re, és a tábla is a helyén van. A lekérdezés nem dolgozik valamiért.
LOG:
[00:35:44] [ERROR] \"mysql_tquery\" - invalid connection handle. (ID = 0).
[00:35:44] [ERROR] \"cache_get_data\" - invalid connection handle. (ID = 0).
más nem volt a log-ban, viszont most, hogy az érték 1, mintha csatlakozva lenne. Hát..
[11:21:04] [WARNING] cache_get_data - no active cache
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
[11:21:04] [ERROR] cache_get_row_int - invalid data type
Dupla hozzászólás automatikusan összefûzve. ( 2013. augusztus 03. - 11:55:27 )
Szerk.: A cache_get_row_int-t elnéztem, és kijavítottam.
a cache_get_data - no active cache, az marad. Valami a lekéréssel rossz, mivel phpmyadmin-ba is látom,hogy becsatlakozik, log-ban sincs hiba.
Ahogy írja ezt a hibát úgy bemásolnád a pawn kódod?
Úgy talán ha én is kitudom próbálni vagy ha látnám akkor tudnám mondani mi a hiba.
De biztosra veszem hogy csatlakozási hiba lehet, mert annak nem így kellene mûködnie hogy megadod az 1-es értéket, hanem a csatlakozás azonosítót kellene vissza adnia a mysql_connect-nek, valószínûleg emiatt írja hogy nincs aktív adat tárolva.
Még a mysql_connect után írd be ezt hátha kidob valami hasznos információt:
mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);