Построение цикла
#21

PHP код:
new string[64];
new 
DBResult:Result db_query(DataBase,"SELECT * FROM table ORDER BY RAND() LIMIT 1");
db_get_field_assoc(Result,"ID",string,sizeof(string));
printf("%d",strval(string)); 
Reply
#22

А ты уверен что у тебя там есть поле ID?
Reply
#23

Конечно, 100 строк с полями: ID , name.
Такой же запрос работает.
PHP код:
new string[64];
new 
DBResult:Result db_query(DataBase,"SELECT * FROM table WHERE ID = 1");
db_get_field_assoc(Result,"ID",string,sizeof(string));
printf("%d",strval(string)); 
Reply
#24

Вариантов больше нет? ;(
Reply
#25

Quote:
Originally Posted by Gameyer
Посмотреть сообщение
Вариантов больше нет? ;(
Скорее всего версия SQLite в SAMP-е не поддерживает RAND(). Извлекай количество rows, выдёргивай данные из random(rows).

pawn Код:
new string[64];
new DBResult:Result = db_query(DataBase,"SELECT * FROM table");
new SelectedRow = random(db_num_rows(Result)); ////////////////////////
db_get_field(Result,SelectedRow,string,64); ////////////////////////
printf("%d",strval(string));
p.s. Если это связано с твоим изначальным вопросом, то не легче ли выдёргивать рандомный ид уже из массива в котором загружены все строки?
Reply
#26

Где в твоем коде используется SelectedRow и зачем два раза ID получать? (может я ошибаюсь, объясни).
Да, связано с изначальным вопросом, но с этим у меня тоже возникли проблемы. Созданные ID в массиве
PHP код:
IsFind[id] = true
Reply
#27

Quote:
Originally Posted by Gameyer
Посмотреть сообщение
Где в твоем коде используется SelectedRow и зачем два раза ID получать? (может я ошибаюсь, объясни).
Пардон, исправил
Quote:
Originally Posted by Gameyer
Посмотреть сообщение
Да, связано с изначальным вопросом, но с этим у меня тоже возникли проблемы. Созданные ID в массиве
PHP код:
IsFind[id] = true
Этого тебе тоже не нужно. Сам цикл от SQLite не будет выводить несуществующие строки. rowid не равен твоему полю "ID". Вот, набросал пример:
pawn Код:
//////////////////////////////////////////////////////////////
// GLOBAL
new MyIDS[200], SizeMyIDS = 0;
//////////////////////////////////////////////////////////////




//////////////////////////////////////////////////////////////
new Result[64];
new DBResult:myquery = db_query(DataBase,"SELECT * FROM table");
while(db_next_row(myquery)) {
    db_get_field_assoc(myquery, "ID", Result, 64);
    SizeMyIDS[++SizeMyIDS] = strval(Result);
    printf("DEBUG WHILE ID: %d",strval(Result));
}
db_free_result(myquery);
printf("DEBUG RANDOM ID: %d", MyIDS[random(SizeMyIDS)]);
//////////////////////////////////////////////////////////////

// Обрати внимание на Result и myquery. В DBResult имя Result менее подходящее.
Не уверен правда в функции db_next_row изза сомнительного описания return на вики, поэтому возможно всё будет работать не так как нужно. В любом случае там есть DEBUG print =)
Reply
#28

Нет, это не вариант, тем более и не скомпилируется.
Почему не надо через IsFind[id] = true; из этих id раные true доступные ID. из них надо как-нибудь сделать.
Reply
#29

Quote:
Originally Posted by Gameyer
Посмотреть сообщение
Нет, это не вариант, тем более и не скомпилируется.
Почему не надо через IsFind[id] = true; из этих id раные true доступные ID. из них надо как-нибудь сделать.
Смысли? Почему не вариант? Что именно нужно?
Что пишет компилятор? (Лан, проверил, исправил очепятки).
pawn Код:
new Result[64];
new DBResult:myquery = db_query(DataBase,"SELECT * FROM table");
while(db_next_row(myquery)) {
    db_get_field_assoc(myquery, "ID", Result, 64);
    MyIDS[++SizeMyIDS] = strval(Result);
    printf("DEBUG WHILE ID: %d",strval(Result));
}
db_free_result(myquery);
printf("DEBUG RANDOM ID: %d", MyIDS[random(SizeMyIDS)]);
UPD:
Если нужен рандом и именно проверка по IndexID то можно сделать так:
pawn Код:
//////////////////////////////////////////////////////////////
// GLOBAL
new MyIDS[200], InMyIDS[200], SizeMyIDS = 0;
//////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////
new Result[64];
new DBResult:myquery = db_query(DataBase,"SELECT * FROM table");
while(db_next_row(myquery)) {
    db_get_field_assoc(myquery, "ID", Result, 64);
    new ID_From = strval(Result);
    MyIDS[++SizeMyIDS] = ID_From;
    InMyIDS[ID_From] = true;
    printf("DEBUG WHILE ID: %d",strval(Result));
}
db_free_result(myquery);
printf("DEBUG RANDOM ID: %d", MyIDS[random(SizeMyIDS)]);
//////////////////////////////////////////////////////////////

/*
Таким образом можно проверить доступность любого IndexID из таблицы. Например:
    if(InMyIDS[25]) {
        ид 25 существует
    }

*/
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)