Jump to content
  • 0

Помогите с сортировкой!


hamsterhomka
 Share

Question

Здравствуйте, уважаемые программисты. У меня есть код:

<?
include("../modules/conf.php");
mysql_select_db(characters,mysql_connect($nameSERVER,$nameUSER,$passUSER));
function top10achievement() {
$sm_read = file("achievements.html");
$sm_read = implode("",$sm_read);
$result_index = mysql_query("SELECT guid,totalKills,name,race,gender,class,deleteDate FROM characters WHERE deleteDate IS NULL");
$myrow_index = mysql_fetch_array($result_index);
preg_match("/\[_repeat\](.*?)\[_repeat\]/s",$sm_read,$div_menu);
do {

$guid = $myrow_index[guid];
$result_a = mysql_query("SELECT achievement FROM character_achievement WHERE guid='$guid'");
$achievement_n = mysql_num_rows($result_a);
$achievement_n .= "/1058";


$edd_tamp = $div_menu[1];
$edd_tamp = str_replace("[_src_faction]",$img_src_faction,$edd_tamp);
$edd_tamp = str_replace("[_src_race]",$img_src_race,$edd_tamp);
$edd_tamp = str_replace("[_src_class]",$img_src_class,$edd_tamp);
$edd_tamp = str_replace("[_name]",$myrow_index[name],$edd_tamp);
$edd_tamp = str_replace("[_achievements_n]",$achievement_n,$edd_tamp);
$disp .= $edd_tamp;
}
while($myrow_index = mysql_fetch_array($result_index));
$disp = preg_replace("/\[_repeat\].*?\[_repeat\]/s",$disp,$sm_read);
return $disp;
}
?>

И мне нужно, чтобы выводимые строки сортировались по $achievement_n. Подскажите пожалуйста как это сделать.

Edited by alexriz
оформляйте код в тег CODE
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

сам я в майскюль небумбум но наверное стоит указать что этот код делает и что вы ожидаете от сортировки по $achievement_n

конечно что то подобное я вытварял в универе но недопойму как то...

Link to comment
Share on other sites

  • 0

это что у вас за шаблонизатор? я так понимаю в этом велосипеде не предусмотрено сортировки.

А если попробовать запрос вида


SELECT
`guid`.`ch`,
`totalKills`.`ch`,
`name`.`ch`,
`race`.`ch`,
`gender`.`ch`,
`class`.`ch`,
`deleteDate`.`ch`,
`achievement`.`ach`
FROM `characters` `ch` WHERE 1
JOIN `character_achievement` `ach` ON `ach`.`guid` = `ch`.`guid`
WHERE 1
AND `deleteDate`.`ch` IS NULL
ORDER BY `achievement`.`ach`

ЗЫ: почему


$sm_read = file("achievements.html");
$sm_read = implode("",$sm_read);

а не просто


$sm_read = file_get_contents("achievements.html");

Link to comment
Share on other sites

  • 0

это что у вас за шаблонизатор? я так понимаю в этом велосипеде не предусмотрено сортировки.

А если попробовать запрос вида


SELECT
`guid`.`ch`,
`totalKills`.`ch`,
`name`.`ch`,
`race`.`ch`,
`gender`.`ch`,
`class`.`ch`,
`deleteDate`.`ch`,
`achievement`.`ach`
FROM `characters` `ch` WHERE 1
JOIN `character_achievement` `ach` ON `ach`.`guid` = `ch`.`guid`
WHERE 1
AND `deleteDate`.`ch` IS NULL
ORDER BY `achievement`.`ach`

ЗЫ: почему


$sm_read = file("achievements.html");
$sm_read = implode("",$sm_read);

а не просто


$sm_read = file_get_contents("achievements.html");

Спасибо большое за ответ, а что означают приставки вида ".ch."??? И нужна сортировка по кол-ву значений achievement тоесть по mysql_num_rows от achievement

Edited by hamsterhomka
Link to comment
Share on other sites

  • 0

1. и в какой переменно содержится значение нужное мне?

2. Спасибо большое за ответ, а что означают приставки вида ".ch."??? И нужна сортировка по кол-ву значений achievement тоесть по mysql_num_rows от achievement

А, если кол-во записей присоединяется, то тогда прошу прощения, простой join не подойдёт.

ch. - это псевдоним таблицы, для более лаконичной записи, он объявляется сразу после полного имени, вслед за FROM/JOIN.

Тьфу, я похоже вам заведомо нерабочий запрос предложил, там ошибки)) Второпях писал. А Int и промолчал))

Вот что-то такое, мне кажется должно быть:


SELECT
ch.*,
COUNT(`ach`.`achievement`) AS `counter`
FROM `characters` `ch`, `character_achievement` `ach`
WHERE 1
AND `ch`.`deleteDate` IS NULL
AND `ach`.`guid` = `ch`.`guid`
ORDER BY `counter` DESC

Что тут происходит?

1. Выбираем все значения из characters, при условии .`deleteDate` IS NULL

2. считаем кол-во строк в таблице `character_achievement` с achievement при с одинаковыми guid (как я понимаю, тут можно любой столбец считать, т.к. нам кол-во строк же надо, а значения столбцов безразличны?)

3. сортировка по кол-ву

4 нужное вам значение в counter

Edited by Быколай
Link to comment
Share on other sites

  • 0

1. и в какой переменно содержится значение нужное мне?

2. Спасибо большое за ответ, а что означают приставки вида ".ch."??? И нужна сортировка по кол-ву значений achievement тоесть по mysql_num_rows от achievement

А, если кол-во записей присоединяется, то тогда прошу прощения, простой join не подойдёт.

ch. - это псевдоним таблицы, для более лаконичной записи, он объявляется сразу после полного имени, вслед за FROM/JOIN.

Тьфу, я похоже вам заведомо нерабочий запрос предложил, там ошибки)) Второпях писал. А Int и промолчал))

Вот что-то такое, мне кажется должно быть:


SELECT
ch.*,
COUNT(`ach`.`achievement`) AS `counter`
FROM `characters` `ch`, `character_achievement` `ach`
WHERE 1
AND `ch`.`deleteDate` IS NULL
AND `ach`.`guid` = `ch`.`guid`
ORDER BY `counter` DESC

Что тут происходит?

1. Выбираем все значения из characters, при условии .`deleteDate` IS NULL

2. считаем кол-во строк в таблице `character_achievement` с achievement при с одинаковыми guid (как я понимаю, тут можно любой столбец считать, т.к. нам кол-во строк же надо, а значения столбцов безразличны?)

3. сортировка по кол-ву

4 нужное вам значение в counter

Спасибо, за подробное объяснение, но что-то не выводятся все результаты, а только один, возможно я что-то не так сделал вот страница http://wow-moon.dyndns.biz/content/index.php?page=top10achievement

вот код

<?

include("../modules/conf.php");

mysql_select_db(characters,mysql_connect($nameSERVER,$nameUSER,$passUSER));

function top10achievement() {

$sm_read = file("achievements.html");

$sm_read = implode("",$sm_read);

$result_index = mysql_query("

SELECT

ch.*,

COUNT(`ach`.`achievement`) AS `counter`

FROM `characters` `ch`, `character_achievement` `ach`

WHERE 1

AND `ch`.`deleteDate` IS NULL

AND `ach`.`guid` = `ch`.`guid`

ORDER BY `counter` DESC");

$myrow_index = mysql_fetch_array($result_index);

preg_match("/\[_repeat\](.*?)\[_repeat\]/s",$sm_read,$div_menu);

do {

$edd_tamp = $div_menu[1];

$edd_tamp = str_replace("[_src_faction]",$img_src_faction,$edd_tamp);

$edd_tamp = str_replace("[_src_race]",$img_src_race,$edd_tamp);

$edd_tamp = str_replace("[_src_class]",$img_src_class,$edd_tamp);

$edd_tamp = str_replace("[_name]",$myrow_index[name],$edd_tamp);

$edd_tamp = str_replace("[_achievements_n]",$myrow_index[counter],$edd_tamp);

$disp .= $edd_tamp;

}

while($myrow_index = mysql_fetch_array($result_index));

$disp = preg_replace("/\[_repeat\].*?\[_repeat\]/s",$disp,$sm_read);

return $disp;

}

?>

Link to comment
Share on other sites

  • 0

В общем, (после того как глянул на базу, любезно предоставленную ТС), составил следующий запрос, который выбирает нужные данные одним махом:


SELECT
ch.guid,
ch.totalKills,
ch.name,
ch.race,
ch.gender,
ch.class,
ch.deleteDate,
(SELECT COUNT(ach.guid)
FROM character_achievement ach
WHERE 1
AND ach.guid = ch.guid) AS counter
FROM characters ch
WHERE 1
AND ch.deleteDate IS NULL

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Лелик
      Источник для импорта сменил кодировку с utf-8 на  windows-1251. Всвязи с этим не выполняются циклы импорта, ошибка 1064 и кириллица выводится в квадратах. Также вверху шапки сайта при загрузке страницы админки с импортом и при оформлении заказа (на другой линии) [Unknown: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/p10824/xn--80agbgp3aafdnsm0c.xn--p1ai/system/library/partner.php on line 44 ]  Нужно адаптировать код по примеру [$q = 'select id, fio from `users`';
      $res = mysql_query($q);
      while (($row = mysql_fetch_assoc($res)) !== false) {
      // Преобразуем fio из utf-8/latin1 в windows-1251
      $s = iconv('utf-8', 'windows-1251', $row['fio']);
      // Преобразуем строку из однобайтной кодировки обратно в utf-8, выдав её за windows-1251
      $s = iconv('windows-1251', 'utf-8', $s);
      // Сохраняем назад в БД
      $q = 'update `users` set fio = "'.addslashes($s).'" where id = '.$row['id'];
      mysql_query($q);
      }]. Файл для работы прилагаю
      partner.php
    • By Only091
      Помогите пожалуйста, не получается сделать постраничную навигацию. Делал все по урокам. в Итоге получилось сделать два разных каталога один с фильтрами другой с постраничной навигацией. И теперь я пытаюсь объединить два каталога. Но не получается. Сами файлы урока в архике каталог. Буду очень благодарен если мне помогут! catalog.phpcatalogDB.js
      каталог.7z
    • By Full-R
      Рекомендую выгодный хостинг Sprinthost, который поддерживает все версии PHP и Node.js.
      Производительность достаточная и есть возможность докупать процессные сервера. Например, для запуска ресурсоемких скриптов, которые садят сервер задницей в лужу для всех пользователей пока процесс кубаторит.
      Sprinthost.ru
      Цены спиртхоста уравновешенные, а качество обслуживания все таки повыше чем у конкурентов. Самый дешевый хостинг обходится в 118 рублей в месяц.
      Не банят при единоразовых всплесках нагрузки и дают ресурсов вплоть до потолка сервера на 1-2 часа без переплат.
      Можно регистрировать домены через reg.ru и по ночам отхватывать вкусные домены без переплат(я пол часа назад отхватил домен из 4х букв в зоне net за 1000 рублей).
      На серверах стоит Redhat или CentOS.
      Также дают бесплатные сертификаты SSL Let's Encrypt.
      Бэкап каждый день.
      Панель управления хостингом своя и очень удобная. Нет ни каких голимых запутанных опций.
    • By tor243
      Имеется таблица table с полями id, refpost, type и comment. Тип поля comment TEXT.
      Необходимо получит строки, где refpost у которой type='A' или type='D', который встречается в поле comment.
      Пробовал так:
      SELECT id, refpost, type, comment FROM table WHERE comment LIKE ( SELECT refpost FROM table WHERE type='A' OR type='D' ) Без результатов. Выдает ошибку 1242: Subquery returns more than 1 row
    • By belhost
      Всем привет!
      Бесплатная консультация по серверам и вопросам настроек, обращайтесь.
      Помогу чем смогу
      ————————————————————————————————
      Также предоставляю услуги:
      - Помощь c серверными рещениями при открытие IT проектов
      - Большой опыт в готовых IT решений для Вашего бизнеса
      - Подбор конфигурации сервера и размещение серверов
      - Регистрация и установка SSL и TLS а также Let's Encrypt
      - Оптимизация сервера под HighLoad. Nginx, PPH-FPM, HHTP2
      - Администрирование Ubuntu, Debian, Centos, Fedora, RedHat
      - Администрирование и мониторинг Windows Server 03/08/12
      - Установка панелей Plesk, ISP manager 4/5, DA, Vesta, WebMin
      - Установка систем виртуализации KVM, OpenVZ, VMWare, Hyper
      - Настройка сервера под Bitrix, WP, Joomla, Drupal, Yii, OpenCart
      - Установка и настройка мониторинга Munin, Nagios, Zabbix, Cacti
      - Гео распределенная фильтрация DDOS атак до 1000Gb/s
      - Организация системы Бэкапирования FTP, ЯД, DropBox, NAS
      - Мониторинг за состоянием сервера и его служб 24х7
      - Оперативное вмешательство при сбоях в работе служб сервера
      - Экстренное обращение к администратору 24х7 по телефону
      - Удаляем трояны/бэкдоры, спамботы, взломщики паролей
      - Удаляем программы-шпионы, DoS/DDoS агенты, iframe вставки
      - Удаляем рекламные блоки и прочие угрозы вашему сайту
      - Сервер БД MySQL, MsSQL, PostgresSQL, MariaDB, Percona
      - Общение с Тех Поддержкой Вашей хостинговой площадкой
      - Установка и настройка proxy сервера на базе Squid, 3proxy, l2tp
      - Установка и настройка почтового сервера Postfix, Exim, SendMail
      - Настройка цифровых подписей почты DKIM, SPF, DMARC, PTR
      - Настройка и установка VPN сервера PPTP, IPSec, L2Tp, OpenVPN
      - Настройка и установка сервера на AWS Amazon EC2, DigitalOcean
      - Администрирование и создание контейнеров Docker
      - Настройка и установка централизованного администрирование Ansible, RunDeck
      ————————————————————————————————
      Мои профили и отзывы на Биржах:
      FL.ru
      Weblancer
      freelancehunt
      freelance.ru
      5bucks.ru
      linkedin.com
      ————————————————————————————————
      Мои контакты:
      Сайт BEL-HOST | SKYPE: sys_admin3 | WhatsApp: +375256122681 | VIBER: +375256122681 | TELEGRAM: @gev511 |
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy