Вопросы по PHP |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6810-й день
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
Вопросы по PHP |
Glavar |
Dec 12 2010, 20:35
Пост
#1
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
Доброго время суток!
1. Скажите как мне обрезать первых 7 знаков, а остальные занести в базу? 2. У меня есть максимальное число голосов припустим 50, как мне присвоить ему 1 место 15 глосов - 5 место 43 голоса - 2 место 28 голосов - 3 место 24 - 4 место и т.д. и что бы место записывалось и обновлялось автоматически в базе данных? Тема для обговорення мови програмування PHP, всі сторонні коментарі будуть видалятися, а їх автори отримувати % Сообщение отредактировал BoyKot - Feb 3 2011, 13:22 |
Dr.HeadShot |
Dec 12 2010, 20:50
Пост
#2
|
Репутация: 23 Дух Группа: Пользователи Сообщений: 63 С нами с: 29-July 07 |
1. substr("abcdefghijklmnop", 7);
|
Meliora |
Dec 13 2010, 0:19
Пост
#3
|
Незарегистрированный |
SELECT *
FROM <table> ORDER BY <голоса> DESC |
Glavar |
Dec 13 2010, 17:59
Пост
#4
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
|
reiten |
Dec 13 2010, 18:44
Пост
#5
|
Репутация: 229 Cтаршой Группа: Пользователи Сообщений: 813 С нами с: 16-January 08 |
SELECT COUNT(*)
FROM <table> WHERE votes <= (SELECT votes FROM <table> WHERE id=<target_id>) |
Glavar |
Dec 13 2010, 18:59
Пост
#6
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
|
Нурик Сакура |
Dec 14 2010, 10:04
Пост
#7
|
Репутация: 76 Cтаршой Группа: Пользователи Сообщений: 695 С нами с: 19-February 07 |
2. У меня есть максимальное число голосов припустим 50, как мне присвоить ему 1 место Все телепаты уехали на зимние каникулы, потому распиши, будь добр, подробнее, где у тебя есть максимальное число голосов и как ты хочешь присвоить. Где у тебя хранятся пользователи и как они связаны с голосами?15 глосов - 5 место 43 голоса - 2 место 28 голосов - 3 место 24 - 4 место и т.д. и что бы место записывалось и обновлялось автоматически в базе данных? |
Glavar |
Dec 14 2010, 15:14
Пост
#8
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
Есть таблица:
id name text golosa mesto 1 test1 text1 15 2 test2 text2 43 3 test3 text3 74 4 test4 text4 12 .... и в поле "место" надо что база сама вводила 1 место = максимальное (в нашем случае 74), 2 место = 43, 3 место = 15, 4 место = 12 и т.п. И при изминении у id 2 и id 3 менялись места автоматически и т.п. А на сайте вывести $con = mysql_query("SELECT * FROM таблица); $wr_con = mysql_fetch_array($con); printf("Тема %s, <br> Текст: %s<br> Голосов: %s<br> Тема на %s месте",$wr_con['name'],$wr_con['text'],$wr_con['golosa'],$wr_con['mesto']); Примерно это |
Dreyk |
Dec 14 2010, 15:53
Пост
#9
|
Репутация: 120 Постоялец Группа: Пользователи Сообщений: 1 305 С нами с: 13-October 06 |
Если ты хочешь сделать это на стороне базы автоматически - то нужны триггеры.
Но если проект хоть сколько-нибудь большой, это замучает мускуль. Легче всего делать это кроном, к примеру, раз в 4-5 минут: сортировать список по голосам и проставлять им всем новые места Сообщение отредактировал Dreyk - Dec 14 2010, 15:54 |
Glavar |
Dec 14 2010, 16:08
Пост
#10
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
ну 4-5 минут - это супер. Только как сделать?
|
Dreyk |
Dec 14 2010, 16:12
Пост
#11
|
Репутация: 120 Постоялец Группа: Пользователи Сообщений: 1 305 С нами с: 13-October 06 |
вначале шлешь
SELECT @PLACE := 0; а потом UPDATE `table` SET `table`.`mesto` = (@PLACE := @PLACE +1) ORDER BY `table`.`golosa` DESC; как-то так Сообщение отредактировал Dreyk - Dec 14 2010, 16:13 |
Glavar |
Dec 14 2010, 16:26
Пост
#12
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
|
Dreyk |
Dec 14 2010, 16:37
Пост
#13
|
Репутация: 120 Постоялец Группа: Пользователи Сообщений: 1 305 С нами с: 13-October 06 |
Это в скрипте, который будет вызываться cron'ом раз в 5 минут
Если слово крон ни о чем не говорит - иди вот http://forum.0day.kiev.ua/index.php?showtopic=205958 почитай Сообщение отредактировал Dreyk - Dec 14 2010, 16:41 |
Glavar |
Dec 14 2010, 18:23
Пост
#14
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
Так этот скрипт в индекс кидать или в отдельный файл? и как крон запустить? и как записать в php или html?
Почитал и сделал код */5 * * * * /file/database.php а куда его вставить? php.su говорит: "Разумеется, ваш сервер должен быть типа Unix, а не Windows." Сообщение отредактировал Glavar - Dec 14 2010, 19:10 |
R_E_W |
Dec 14 2010, 21:29
Пост
#15
|
Репутация: 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
Пост
#16
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 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++; } ?> как-то так. Не нужно никаких кронов триггеров и работать будет в разы быстрее. А на больших таблицах очень ощутимо быстрее. Большое спс, завтра попробую. Надеюсь все ок будет. Я сам в пхп недавно. умею вытащить, вставить, отсортировать, обновить только. Еще раз спс большое и звиняете за ошыбки, в русс не силен |
Glavar |
Dec 16 2010, 23:26
Пост
#17
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
Код работает. на 9о %. пока что не разобрался, почему он поглощает максимальное значение и выводит следуишие.
Я про этот код: <?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++; } ?> Таблица где идет подсчет голосов Сообщение отредактировал Glavar - Dec 16 2010, 23:31 |
artishok |
Dec 17 2010, 13:53
Пост
#18
|
Репутация: 807 follow the music Группа: Пользователи Сообщений: 5 125 С нами с: 31-December 06 |
del
Сообщение отредактировал паZитифф - Dec 17 2010, 13:54 |
Glavar |
Dec 17 2010, 17:18
Пост
#19
|
Репутация: 10 Активист Группа: Пользователи Сообщений: 378 С нами с: 11-May 08 |
При написании:
SELECT COUNT( * ) FROM <table> WHERE votes >= (SELECT votes FROM <table>WHERE user_id = <user_id> ) $test = mysql_query("SELECT COUNT(golosa) FROM music WHERE golosa >= (SELECT golosa FROM music WHERE login = 'Glavar' "); $row_tes = mysql_fetch_array($test); Дало ошыбку: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\index.php on line 215 Сообщение отредактировал Glavar - Dec 17 2010, 17:19 |
AnNE DoM.ini |
Dec 17 2010, 17:23
Пост
#20
|
Репутация: 173 Постоялец Группа: Пользователи Сообщений: 1 412 С нами с: 30-June 07 |
$test = mysql_query("SELECT COUNT(golosa) FROM music WHERE golosa >= (SELECT golosa FROM music WHERE login = 'Glavar') "); $row_tes = mysql_fetch_array($test); |
Упрощённая версия | Сейчас: 5th November 2024 - 17:42 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |