 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
SQL
| |
| DarkByte | Дата: Четверг, 10.09.2009, 09:49 | Сообщение # 16 |
|
Долгожитель
Группа:
Продвинутые
Сообщений: 1577
Награды: 7
Город: Челябинск
Репутация: 182
Замечания: 0%
Статус: 
| Quote (stepmex) афигительная оптимизация, выбрать все поля или определенные. Всю строку скопировать в массив проще чем заставлять ещё и искать в ней столбцы по ключам MySQL - это не обычный текстовый(е) файл(ы). Каждая строка в таблице имеет одну и туже длину , одноимённые поля в строке имеют одинаковую длину. Поэтому чтобы найти в таблице 213123 строку, не нужно перебирать все предыдущие (как это было бы сделано при использовании текстового файла), а достаточно перейти на позицию в файле таблицы 213123 умноженную на размер одной строки (который записан в заголовке таблице). Аналогично с полями, MySQL не читает всю строку, если ему это не требуется (за него это сделает жёсткий диск, но это уже совсем другая история ) Если у ТС в таблице 2 поля, ник и пароль, то да, * вполне допустима, но если в таблице штук 100 столбцов, то зачем грузить их все, если из них будет использоваться 1 или 2? Поля переменной длины, типа blob, text, varchar хранятся в отдельных файлах и работа с ними выполняется гораздо медленнее, чем с теми, которые имеют ограниченную длину, типа int, char, float, timestamp. Но и для них применяются различные алгоритмы оптимизации. Quote (stepmex) а это смотря как сделать Например как сделать с учётом регистра?
MusicSig vkontakte - расширение функционала ВКонтакте для Google Chrome
|
| |
|
|
| stepmex | Дата: Четверг, 10.09.2009, 10:04 | Сообщение # 17 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Quote (DarkByte) Например как сделать с учётом регистра? ваиант 1: Quote Если указан флаг BINARY, то при запросе SELECT строка будет сравниваться с учетом регистра. вариант 2: Code Бинарные данные - это почти то же самое, что и данные в формате TEXT, но только при поиске в них учитывается регистр символов. TINYBLOB Может хранить не более 255 символов. BLOB Может хранить не более 65 535 символов. MEDIUMBLOB Может хранить не более 16 777 215 символов. LONGBLOB Может хранить не более 4 294 967 295 символов. вариант 3: кодировать, средствами сервера, имя в цифровой код и хранить в БД код.Добавлено (10.09.2009, 10:04) --------------------------------------------- А про запросы всех полей или определенных, не так уж существенно, это все равно выполняет мускул сервер, а ему на это много труда не нужно.
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| elka | Дата: Суббота, 19.09.2009, 18:37 | Сообщение # 18 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус: 
| Как сделать чтобы в БД сравнивало числа, а не символы? Я решил сделать через цикл чтение. Quote for(new i = 0; i < 10; i++) { GangInfo[i][GKill] = strval(db_Get("Gang", "Gkill", "GID", i)); GangInfo[i][GDeath] = strval(db_Get("Gang", "GDeath", "GID", i)); } Мне выдает ошибку "error 035: argument type mismatch (argument 4)" Как я понял, это из за того что в инклуде идет запрос с символами, а я перебираю числа. Вот функция которую использовал из WODB.inc Quote stock db_Get(table[], key[], titul[], value[]) { format(DBQuery, sizeof(DBQuery), "SELECT %s FROM %s WHERE LOWER(%s) = LOWER('%s') LIMIT 1;", key, table, titul,value); Result = db_query(DataBase, DBQuery); db_get_field(Result, 0, DBQuery, 256); db_free_result(Result); return DBQuery; }
Сообщение отредактировал elka - Суббота, 19.09.2009, 18:38 |
| |
|
|
| stepmex | Дата: Суббота, 19.09.2009, 19:28 | Сообщение # 19 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Quote (elka) Как сделать чтобы в БД сравнивало числа, а не символы? БД не умеет сравнивать, она умеет только записывать, хранить и выводить данные.
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| elka | Дата: Суббота, 19.09.2009, 19:55 | Сообщение # 20 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус: 
| Тогда вопрос по другому. Как вывести данные как число, а не как символ.
|
| |
|
|
| stepmex | Дата: Суббота, 19.09.2009, 20:32 | Сообщение # 21 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| elka, strval() тебе в помощь
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| elka | Дата: Суббота, 19.09.2009, 21:26 | Сообщение # 22 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус: 
| stepmex, я изложил проблему. Мне выдает ошибку "error 035: argument type mismatch (argument 4)""
Сообщение отредактировал elka - Суббота, 19.09.2009, 21:31 |
| |
|
|
| Dima-kun | Дата: Суббота, 19.09.2009, 21:28 | Сообщение # 23 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| возможно это значит что нужно брать не переменную а массив или наоборот
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
Сообщение отредактировал DizeL-ZR- - Суббота, 19.09.2009, 21:33 |
| |
|
|
| stepmex | Дата: Суббота, 19.09.2009, 21:30 | Сообщение # 24 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| elka, выделяю для чайников "argument 4": Quote for(new i = 0; i < 10; i++) { GangInfo[i][GKill] = strval(db_Get("Gang", "Gkill", "GID", i)); GangInfo[i][GDeath] = strval(db_Get("Gang", "GDeath", "GID", i)); } Добавлено (19.09.2009, 21:30) ---------------------------------------------
Quote (DizeL-ZR-) это значит что нужно брать не переменную а массив или наоборот тебе сколько раз говорили: "не знаешь - молчи!", послушайся совета и исчезни из темы, горе-советчик!
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| elka | Дата: Суббота, 19.09.2009, 21:36 | Сообщение # 25 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус: 
| stepmex, Я знаю что проблема в i. Но как мне сделать цикл, чтобы прочитать данные. for(new i = 0; i < 10; i++) { А не писать одно и тоже. GangInfo[0][GKill] = strval(db_Get("Gang", "Gkill", "GID", "0")); GangInfo[0][GDeath] = strval(db_Get("Gang", "GDeath", "GID", "0")) GangInfo[1][GKill] = strval(db_Get("Gang", "Gkill", "GID", "1")); GangInfo[1][GDeath] = strval(db_Get("Gang", "GDeath", "GID", "1")) ...
|
| |
|
|
| stepmex | Дата: Суббота, 19.09.2009, 21:40 | Сообщение # 26 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| elka, мозг подключи! Code new tmp[4]; for(new i = 0; i < 10; i++) { format(tmp,sizeof(tmp),"%d",i); GangInfo[i][GKill] = strval(db_Get("Gang", "Gkill", "GID", tmp)); GangInfo[i][GDeath] = strval(db_Get("Gang", "GDeath", "GID", tmp)); }
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| elka | Дата: Суббота, 19.09.2009, 21:58 | Сообщение # 27 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус: 
| stepmex, а вот теперь спасибо.
|
| |
|
|
|
 |
|
 | |
| |
|