Вопросы по PHP |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6829-й день
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
Вопросы по PHP |
Glavar |
Dec 12 2010, 20:35
Пост
#1
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 379 С нами с: 11-May 08 |
Доброго время суток!
1. Скажите как мне обрезать первых 7 знаков, а остальные занести в базу? 2. У меня есть максимальное число голосов припустим 50, как мне присвоить ему 1 место 15 глосов - 5 место 43 голоса - 2 место 28 голосов - 3 место 24 - 4 место и т.д. и что бы место записывалось и обновлялось автоматически в базе данных? Тема для обговорення мови програмування PHP, всі сторонні коментарі будуть видалятися, а їх автори отримувати % Сообщение отредактировал BoyKot - Feb 3 2011, 13:22 |
R_E_W |
Dec 14 2010, 21:29
Пост
#2
|
Репутация: 6 Дух Группа: Пользователи Сообщений: 46 С нами с: 5-April 08 |
Зачем человека мучать тригерами и кроном.
К тому же если в таблице будет 1000 записей, раз в 5 минут все апдейтить? ужс. А если в таблице будет 10000 записей, а если 100000? Я так понял нужно отображать общий отсортированный список с указанием места и количества голосов и чтоб у каждого юзера была возможность посмотреть где-то там у себя в статистике какое у него сейчас место среди учавствующих. Если так то вон жеж человек посоветовал отличный запрос SELECT COUNT(*) FROM <table> WHERE votes <= (SELECT votes FROM <table> WHERE id=<target_id>) его только нужно под себя переделать немного. В вашей таблице должно быть еще поле по которому осуществлять поиск, user_id к примеру или еще чего (оно должно быть уникально). Подставляем, немного поправляем запрос и получаем вывод места для одного пользователя SELECT COUNT( * ) FROM <table> WHERE votes >= ( SELECT votes FROM <table> WHERE user_id = <user_id> ) Вместо <user_id> подставляем айди юзера для которого хотим вычислить позицию. Для отображения же общего списка юзаем order by SELECT * FROM <table> ORDER BY votes DESC Т.к. результаты в любом случае будут обрабатываться в цикле, ничто не мешает добавтить в цикл переменную которая будет отвечать за место. К примеру <?php $sql = 'SELECT * FROM user_votes ORDER BY votes DESC'; $results = mysql_query($sql); $place = 1; while ($row = mysql_fetch_assoc($results)) { echo "{$place}) User {$row['user_id']} with {$row[votes]} votes<br>"; $place++; } ?> как-то так. Не нужно никаких кронов триггеров и работать будет в разы быстрее. А на больших таблицах очень ощутимо быстрее. Сообщение отредактировал R_E_W - Dec 14 2010, 21:33 |
Glavar |
Dec 14 2010, 21:54
Пост
#3
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 379 С нами с: 11-May 08 |
Зачем человека мучать тригерами и кроном. К тому же если в таблице будет 1000 записей, раз в 5 минут все апдейтить? ужс. А если в таблице будет 10000 записей, а если 100000? Я так понял нужно отображать общий отсортированный список с указанием места и количества голосов и чтоб у каждого юзера была возможность посмотреть где-то там у себя в статистике какое у него сейчас место среди учавствующих. Если так то вон жеж человек посоветовал отличный запрос его только нужно под себя переделать немного. В вашей таблице должно быть еще поле по которому осуществлять поиск, user_id к примеру или еще чего (оно должно быть уникально). Подставляем, немного поправляем запрос и получаем вывод места для одного пользователя SELECT COUNT( * ) FROM <table> WHERE votes >= ( SELECT votes FROM <table> WHERE user_id = <user_id> ) Вместо <user_id> подставляем айди юзера для которого хотим вычислить позицию. Для отображения же общего списка юзаем order by SELECT * FROM <table> ORDER BY votes DESC Т.к. результаты в любом случае будут обрабатываться в цикле, ничто не мешает добавтить в цикл переменную которая будет отвечать за место. К примеру <?php $sql = 'SELECT * FROM user_votes ORDER BY votes DESC'; $results = mysql_query($sql); $place = 1; while ($row = mysql_fetch_assoc($results)) { echo "{$place}) User {$row['user_id']} with {$row[votes]} votes<br>"; $place++; } ?> как-то так. Не нужно никаких кронов триггеров и работать будет в разы быстрее. А на больших таблицах очень ощутимо быстрее. Большое спс, завтра попробую. Надеюсь все ок будет. Я сам в пхп недавно. умею вытащить, вставить, отсортировать, обновить только. Еще раз спс большое и звиняете за ошыбки, в русс не силен |
Упрощённая версия | Сейчас: 25th November 2024 - 8:58 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |