База данных L2Fortress

Теги:
 

ELaI

новичок
Использую сервер этой команды, в написании запросов к базе в пхп не силен.
Поэтому у меня возникли большие проблемы с веб обвязкой сервера.
Не знаю как правельно написать код для таких параметров как
Топ 10 ( что бы писался "лвл имя пол класс клан время в игре")
Топ 100 ( что бы писался "лвл имя пол класс клан время в игре")
Он лайн ( что бы писался "лвл имя пол класс клан время в игре")
Богачи ( что бы писался "лвл имя пол класс клан время в игре общая_сумма_вещей_и_денег")
Дуэлянты (больше очков пвп) ( что бы писался "лвл имя пол класс пвп/пк клан время в игре")
Убийцы (больше всех очков ПК) ( что бы писался "лвл имя пол класс пвп/пк клан время в игре")
Толстокожие (больше всех ХП) ( что бы писался "лвл имя пол класс хп клан время в игре")
мудрые (больше всех МП) ( что бы писался "лвл имя пол класс мп клан время в игре")
Топ людей ( что бы писался "лвл имя пол класс клан время в игре")
Топ эльфов ( что бы писался "лвл имя пол класс клан время в игре")
Для остальных расс сам разберусь как сделать
И наконец время игры ( что бы писался "лвл имя пол класс клан время в игре")

Для всех запросов надо что бы он выводил первую сотню лучших.
Если можно такое написать сделайте плз.
А то я не умею совмещать параметры разных таблиц основываясь на равенстве одного общего параметра.
 
+
-
edit
 

Balancer

администратор
★★★★★
Повтори запрос (чтобы тема поднялась) числа после 15-16-го, когда я в Москву вернусь, поделюсь кодом.
 

ELaI

новичок
немного поправлюсб, показатели должны быть такие
№ Лицо Ник уровень Профессия Клан PvP/PK Время в игре Статус

для топ хп и топ МП:
№ Лицо Ник уровень Професси (Хп или МП) Клан PvP/PK Время в игре Статус

для топ богачей
№ Лицо Ник уровень Професси Клан PvP/PK Время в игре общая сумма всех вещей и денег Статус

Где
№-номер в топе 1-100
Лицо - тут загружается картинка в зависимости от пола и принадлежности к той или иной рассе.
Статус - он лайн либо оф лайн

Ну вобщем остальное понятно.
 

ELaI

новичок
Balancer ты где ? =(( Уже 18 число =(
 
+
-
edit
 

Balancer

администратор
★★★★★
Сорри, меня тут по возвращении из отпуска работой завалили. Попробую сегодня поковыряться :)
 
+
-
edit
 

Balancer

администратор
★★★★★
Сорри, так вчера и не выкроил времени, до конца недели график сильно напряжённый.

Пока, вот, ссылки на старые темы по этому вопросу:
 

ELaI

новичок
Или я чтото не до понимаю в тех запросах или они просто не подходят под мой сервер
Дело в том что на моем сервере информация о черех хранится в 2-х таблицах
в таблице characters и в таблице character_subclasses
в первой хранится:(пишу только те что нас интересуют
account_name obj_Id charr_name sex karma pvpkills pkkills clanid accesslevel online onlinetime
во второй хранится:
char_obj_ID class_id level maxHP maxMP active
вот, надо как то сделать что бы по obj_Id и char_obj_ID они сравнивались, active, отвечает за то что бы сервер определял какой класс выбран (основной или один из суб классов), так вот надо что бы в топе, если несколько одинаковых char_obj_ID, тоесть чар имеет субклассы, он выводил именно активный.
 
+
-
edit
 

Balancer

администратор
★★★★★
Значит, это ещё совсем старые темы.

Ок, тогда свой последний код кидаю, если что-то непонятно, спрашивай:
code php
  1. <?php
  2.     function modules_top_onlinelist_main($title, $database)
  3.     {
  4.                 $ch = &new Cache();
  5.                 if($ch->get('la2', "onlinelist-$database"))
  6.                         return $ch->last;
  7.  
  8.         include_once('obsolete/DataBase.php');
  9.         $hts = &new DataBase($database,'la2', 'la2kkk');
  10.         $list = $hts->get_array("SELECT cl.clan_name, ch.* FROM `characters` `ch` LEFT JOIN `clan_data` `cl` ON (cl.clan_id = ch.clanid) WHERE `online` > ".(0*(time()-1000))." ORDER BY `onlinetime` DESC, `char_name`;");
  11.  
  12.                 $res = "";
  13.  
  14.         $res .= "<table cellSpacing=\"0\" class=\"btab\" width=\"100%\">\n";
  15.                 $res .= "<tr><th colSpan=\"6\">$title</th></tr>\n";
  16.         $res .= "<tr><th>№</th><th>Имя</th><th>Уровень</th><th>Класс</th></th><th>Клан</th><th>Карма</th></tr>\n";
  17.  
  18.         $n = 1;
  19.         foreach($list as $i)
  20.         {
  21.             $classes = $hts->get_array("SELECT * FROM `character_subclasses` WHERE `char_obj_id` = ".addslashes($i['obj_Id']));
  22.  
  23. //                      print_r($classes);
  24.  
  25.                         $span = sizeof($classes);
  26.                         $span = $span > 1 ? " rowSpan=\"$span\"" : "";
  27.  
  28.                         if($i['karma'] > 200)
  29.                         {
  30.                                 $bc="<span style=\"color:red;\">";
  31.                                 $ec="</span>";
  32.                         }
  33.                         else
  34.                         {
  35.                                 $bc="";
  36.                                 $ec="";
  37.                         }
  38.  
  39.             $res .= "<tr>";
  40.             $res .= "<td$span>$n</td>";
  41.             $res .= "<th$span>$bc{$i['char_name']}
     

ELaI

новичок
=0) Во почитал в инете инфу по запросам и вроде начина разбираться, тепреь он у меня правельно выводит топ 100, но, к сожалению, почему то не отображает профу, сейчас разбераться буду, и еще не правельно считает время... если создать чара то будет -1ч 6мин. =)
 

ELaI

новичок
Сейчас буду разбираться куда это вставить, вобще я на обвящке moy-web сижу.
Может мне кинуть тебе веб обвязку? Легче будет, и как раз лучше будет понятно что там не так :)
 
+
-
edit
 

Balancer

администратор
★★★★★
Увы, сейчас ковыряться в чужом коде времени нет :) Сорри. Как писал выше, не раньше следующей недели.
 

ELaI

новичок
Хорошо, но я сейчас более менее начал разбираться в запросах, если есть пдф учебник, и сможешь кинуть то буду премного благодарен. До следующей недели сам поразбираюсь, если возникнут вопросы то буду писать.
 

ELaI

новичок
Первое с чем не могу разобраться так это как посчитать процентное соотношение рас, вот код он считает процентное соотношение полов, в начале, а потом должен рас считаь, я под рассы вроде переделал но не работает все равно =(
В оригенали он считает не как у меня по class_id а по race, но на фортресе у меня отсутствует этот столбец, приходится клас ид разбивать на интервалы. топ расс он отображает по этим запросом хорошо.
Вобщем вот код, скажите что подправить.
code php
  1. <?php
  2. $sql = mysql_query("select count(*) from characters where sex = 0");
  3. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  4. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  5. ?>
  6. <br>
  7. <img src="module/stat/sex1.jpg">
  8. <?php
  9. $sql = mysql_query("select count(*) from characters where sex = 1");
  10. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  11. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  12. ?>
  13. </td><td valign="top">
  14. <b>Процентное соотношение расс:</b><br>
  15. <table><tr><td><left>
  16. Люди:
  17. </left><br>
  18. Эльфы:
  19. <br>
  20. Тёмные эльфы:
  21. <br>
  22. Орки:
  23. <br>
  24. Гномы:
  25. </td><td width="50%">
  26. <?php
  27. $sql = mysql_query("SELECT count(*) FROM character_subclasses  accesslevel<$acclvl and (class_id IN (18, 30) or class_id IN (99,105))");
  28. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  29. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  30. ?><br>
  31. <?php
  32. $sql = mysql_query("SELECT count(*) FROM character_subclasses  WHERE  accesslevel<$acclvl and (class_id IN (18, 30) or class_id IN (99,105))");
  33. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  34. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  35. ?><br>
  36. <?php
  37. $sql = mysql_query("SELECT count(*) FROM character_subclasses  WHERE  accesslevel<$acclvl and (class_id IN (32, 43) or class_id IN (106,112))");
  38. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  39. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  40. ?><br>
  41. <?php
  42. $sql = mysql_query("SELECT count(*) FROM character_subclasses  WHERE  accesslevel<$acclvl and (class_id IN (44, 52) or class_id IN (113,116))");
  43. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  44. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  45. ?><br>
  46. <?php
  47. $sql = mysql_query("SELECT count(*) FROM character_subclasses  WHERE  accesslevel<$acclvl and (class_id IN (53, 57) or class_id IN (117,118))");
  48. $tfg = round(mysql_result($sql, 0, 0)/($charnum/100));
  49. echo "&nbsp<img src=\"module/stat/sexline.jpg\" height=\"10px\" width=\"".$tfg."px\">&nbsp&nbsp ".$tfg."%";
  50. ?>

p.S: обясните мне как делать вставки текста, так как вставил код Balancer
 

ELaI

новичок
Вот еще что не могу сделать, вобщем большая проблема возникла с совмещением 3-х и более таблиц и упорядочиванием всего этого.
Нужно сделать запрос к нескальким таблицам, для вывода ТОП КЛАНОВ, выводится должно:
"Имя клана" "Имя Лидера" "Уровень клана" "Замок" "Сумма уровней всех членов клана" "Кол-во членов" "Средний уровень"
Все данные находятся в таблицах
clan_data (от сюда берем clan_id, clan_name, clan_level, hasCastle, hasClanHall, leader_id)
castle (от сюда надо взять название замка, если значения в таблицы нету написать "нету)
clanhall (от сюда взять город в котором находится клан хол, если он есть, если нету то написать "нету")
characters (от сюда берем obj_id, clanid)
character_subclasses (от сюда берем char_obj_id, level, isBase)
переменные для сравнивания у нас получаются следующие:
clan_id=clanid, obj_id=char_obj_id, ну и ид замков и клан холов

примечание: еще одна проблема которую даже не знаю ка крешить, заключается в том, что когда будет считаться суммма лвлов членов клана, и их=количество, должна идти проверка, является ли класс базовым isBase, а то не каму я думаю не нужны соклановцы в кач-ве субкласса.

Вот какая сложная задача, Balanser если осилишь то будет огромный мегареспектище тебе :))))
Хотя и так тебе за помощ респект
 
UA grey[msl] #22.08.2008 09:30
+
-
edit
 

grey[msl]

новичок
Это только пример запроса к нескольким таблицам(в данном случае к двум)
code text
  1. "SELECT *
  2.             FROM items as I
  3.             JOIN item_names as N
  4.                 ON (I.item_type = '$type') AND (I.slot_bit_type = 'chest') AND (NOT I.equip_pet = 0) AND (I.id = N.id)
  5.             ORDER BY I.physical_defense, I.default_price, N.name;";

Вот сам и тренируйся, а "ваять" за других нет ни времени ни желания. :)
AD Реклама Google — средство выживания форумов :)
+
-
edit
 

ELaI

новичок
grey[msl]> Это только пример запроса к нескольким таблицам(в данном случае к двум)
grey[msl]> Вот сам и тренируйся, а "ваять" за других нет ни времени ни желания. :)
А напиши что есть что что по чем?
А вобще это как мне кажется сложно будет сделать, с моим опытом. Слишком много там надо приравнять и соблюдать,
если кто-нибудь не занят и шарит в этом, сможете сделать, то что я написал.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru