Re: Збереження результатів виконанння sql запиту
потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Бази даних → Збереження результатів виконанння sql запиту
Сторінки Попередня 1 2 3 4 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
Regen написав:потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
на 1 сторінці є моє повідомлення, де я написав аналогічний запит(тобто з RANDOM() і LIMIT), але він виконується від 780 до 1200 мс, що надто багато
До речі, а якщо
CREATE VIEW lengthof5 AS SELECT column FROM table WHERE LENGTH(column)=5;
- вид може кешуватися, що дасть потрібну швидкість без негативних сторін (хоча сильно не певен, треба перевіряти).
використав відображення- в результаті швидкість збільшилась майже на 200 мс в порівнянні з остаднім варіантом
626 проти 807 і 394 проти 461
велике дякую за ідею)
koala написав:До речі, а якщо
CREATE VIEW lengthof5 AS SELECT column FROM table WHERE LENGTH(column)=5;
- вид може кешуватися, що дасть потрібну швидкість без негативних сторін (хоча сильно не певен, треба перевіряти).
використав відображення- в результаті швидкість збільшилась майже на 200 мс в порівнянні з остаднім варіантом
626 проти 807 і 394 проти 598
велике дякую за ідею)
Цю ідею доречно використовувати, якщо у вас складний запит на 300 рядків, а ви хочете спростити його до select * from table. В противному разі ніякого виграшу не буде. Дуже сумніваюсь що ви цих 200 мс отримуєте саме через використання вьюхи, адже різниця між вьюхою і простим запитом лише в тому, що код вьюхи зберігається в базі даних. І все, більше відмінностей, в даному випадку, немає.
ktretyak написав:Regen написав:потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
на 1 сторінці є моє повідомлення, де я написав аналогічний запит(тобто з RANDOM() і LIMIT), але він виконується від 780 до 1200 мс, що надто багато
Вам явно зарано бавитись з Java і Android, почніть хоча б з PHP...
Regen написав:потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
Він, власне, так і робить, гляньте вище.
Чи ви про те рішення, що набрало 1 голос? Ви точно певні?
Вам явно зарано бавитись з Java і Android, почніть хоча б з PHP...
Не треба так. Java — це не Хаскель який-небудь, там на початку немає нічого складного. Вся Америка починає з Джави і нічого.
ktretyak написав:Regen написав:потрібно рандомно вибрати 1 запис, довжина якого 5 символів(ну тобто поля)
Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
Він, власне, так і робить, гляньте вище.
Чи ви про те рішення, що набрало 1 голос? Ви точно певні?
Так, це я випустив з уваги, але він це робив ще до того, як зробив окреме поле і проіндексував його.
ktretyak написав:Вам явно зарано бавитись з Java і Android, почніть хоча б з PHP...
Не треба так. Java — це не Хаскель який-небудь, там на початку немає нічого складного. Вся Америка починає з Джави і нічого.
Можливо ви праві, я це сказав тільки виходячи з того, що говорять інші, які вже мають досвід в різних мовах програмування. Те що я читав, то вони кругом говорять, що PHP це найпростіше, що вони знають.
quez написав:ktretyak написав:Вам явно зарано бавитись з Java і Android, почніть хоча б з PHP...
Не треба так. Java — це не Хаскель який-небудь, там на початку немає нічого складного. Вся Америка починає з Джави і нічого.
Можливо ви праві, я це сказав тільки виходячи з того, що говорять інші, які вже мають досвід в різних мовах програмування. Те що я читав, то вони кругом говорять, що PHP це найпростіше, що вони знають.
Простота оманлива. Брейнфак — найпростіша мова, про яку я знаю, немає ніяких проблем освоїти його за п’ятнадцять хвилин. Але ніхто не радить починати з нього.
ktretyak написав:quez написав:Не треба так. Java — це не Хаскель який-небудь, там на початку немає нічого складного. Вся Америка починає з Джави і нічого.
Можливо ви праві, я це сказав тільки виходячи з того, що говорять інші, які вже мають досвід в різних мовах програмування. Те що я читав, то вони кругом говорять, що PHP це найпростіше, що вони знають.
Простота оманлива. Брейнфак — найпростіша мова, про яку я знаю, немає ніяких проблем освоїти його за п’ятнадцять хвилин. Але ніхто не радить починати з нього.
недавно читав про нього)
Regen написав:ktretyak написав:Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
на 1 сторінці є моє повідомлення, де я написав аналогічний запит(тобто з RANDOM() і LIMIT), але він виконується від 780 до 1200 мс, що надто багато
Вам явно зарано бавитись з Java і Android, почніть хоча б з PHP...
якщо ви уже так пишете- то будьте такі добрі аргументуйте
koala написав:ktretyak написав:Що називається "шах і мат"!
Не простіше набрати в пошуковій машині "random sqlite" і знайти рішення?
Він, власне, так і робить, гляньте вище.
Чи ви про те рішення, що набрало 1 голос? Ви точно певні?Так, це я випустив з уваги, але він це робив ще до того, як зробив окреме поле і проіндексував його.
так я і зараз це роблю)
якщо ви уже так пишете- то будьте такі добрі аргументуйте
Якщо ви пишете такий код, який із 40 тисяч вибирає 4 тисяч рядків, заганяєте їх у пам'ять телефона, і це все зроблено щоб потім вибрати один випадковий рядок, то це явно показує почерк дуже зеленого розробника (не ображайтесь, бо це правда)...
Regen написав:якщо ви уже так пишете- то будьте такі добрі аргументуйте
Якщо ви пишете такий код, який із 40 тисяч вибирає 4 тисяч рядків, заганяєте їх у пам'ять телефона, і це все зроблено щоб потім вибрати один випадковий рядок, то це явно показує почерк дуже зеленого розробника (не ображайтесь, бо це правда)...
та я і не сперечатимусь, що я не зелений)
тому звертаюсь до вас за порадою, що б ви зробили у такому випадку?
ktretyak написав:Regen написав:якщо ви уже так пишете- то будьте такі добрі аргументуйте
Якщо ви пишете такий код, який із 40 тисяч вибирає 4 тисяч рядків, заганяєте їх у пам'ять телефона, і це все зроблено щоб потім вибрати один випадковий рядок, то це явно показує почерк дуже зеленого розробника (не ображайтесь, бо це правда)...
та я і не сперечатимусь, що я не зелений)
тому звертаюсь до вас за порадою, що б ви зробили у такому випадку?
Я б отримав пораду, що мені рано ще цим займатись, і, можливо, дослухався б до неї.
Regen, не знаю всіх нюансів роботи sqlLite, але даний розв'язок має допомогти
1. Створюєте окрему таблицю або view із primary key ID автоінкрементне
2. Запит SELECT count(*) FROM назва_нової_таблиці (у MySQL він кешується і працює практично мементально), якщо ні тоді десь собі у табличці налаштувань збережіть або на крайній випадок у файлик)
Отже після цих двох кроків ви матимете таблицю у якій всі значення пронумеровані від 1 до N (ID), а також знатимете N
3. Якщо ви пишете на java (працював ніколи з java) берете функцію випадкового числа на проміжку від 1 до N, і отримуєте X
4. І тепер робите SELECT column FROM назва_нової_таблиці WHERE ID = X (вибірка по primary key теж можна вважати моментальна)
------
Зверніть увагу що у таблиці назва_нової_таблиці треба буде слідкувати за цілісністю інтервалу 1-N (при операціях видалення)
ну з таблицею тут усе ясно, щоправда на відміну від view її треба буде вручну оновлювати і вона буде тупо дублювати дані, журбинка(
а от з додаванням стовпця до view проблеми:
не можливо додати неіснуючий- тобто він має базуватись на якомусь, котрий уже є в таблиці
не можливо додати автоінкрементний, принаймні так пишуть на stackOverflow
http://stackoverflow.com/questions/2228 … qlite-view
натрапив на ось таке, вроді, працює, але все ж це не автоінкрементний стовпець(
http://stackoverflow.com/questions/1243 … -in-sqlite
+ "You can not add a primary key constraint to views"
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=66480
виходить треба юзати таблицю
У випадку з SQLite (як із більшістю СУБД, де не створюються матеріалізовані вьюхи), вьюха відрізняється від простого запиту тільки тим, що її код зберігається в базі даних. Я ж вам казав про це, чи ви вирішили потратити ще пару днів часу, щоб все таки переконатись в цьому?
Якщо б ви прийняли це до уваги, то зрозуміло що вам би не хотілось додавати "автоінкрементний стовпець" до тексту запиту, а також "вручну оновлювати вьюху"...
У випадку з SQLite (як із більшістю СУБД, де не створюються матерізовані вьюхи), вьюха відрізняється від простого запиту тільки тим, що її код зберігається в базі даних. Я ж вам казав про це, чи ви вирішили потратити ще пару днів часу, щоб все таки переконатись в цьому?
Якщо б ви прийняли це до уваги, то зрозуміло що вам би не хотілось додавати "автоінкрементний стовпець" до тексту запиту...
було таке) і про запит у 300 рядків казали, де вона дає ефективність)