Перейти к контенту

SQL запрос, не найду правильного решения.


Рекомендуемые сообщения

запрос:

SELECT id, name, color, stat_time, stat_year, stat_count, visits_count FROM ibf_members ORDER BY stat_count DESC LIMIT 0, 5

 

выводит всех активных пользователей, НО.

Дело в том что есть еще активные и по кол-ву входов в систему, за это отвечает visits_count.

Хочу сделать так, чтобы находил активных по stat_count, а затем по visits_count.

Сразу сообщу, что так:

..... ORDER BY stat_count, visits_count  DESC LIMIT 0, 5

не получается.

В первом примере берется активный по stat_count, т.е. у которого больше цифра.

Например

 

USER----- stat_count ----- visits_count

user1---------57--------------- 453

юзер2--------45------------- 376

user3---------45 -------------- 762

user4----------9 -------------- 66

user5----------3-------------- 78

 

по примеру видно, что юзер2 по stat_count стоит на равных с user3, но user3 больше входов по visits_count чем у юзер2.

Получается сортируется еще и по алфовиту...

Как это избежать и сделать так, чтобы юзер2 стоял(русский ник) ниже user3, т.е. чтобы проверка была еще и на visits_count.

Думаю понятно описал, яснее некуда..)

Ссылка на комментарий
Поделиться на других сайтах

Тестить было не начём - не ругать сильно :D

Есть таблица rpg_settings

-------------+------------------+
---rpg_name--+--register_rules--+
------1------+--------1---------+
------2------+--------1---------+
------2------+--------5---------+
------3------+--------1---------+
------4------+--------1---------+

 

Такой запрос:

select rpg_name, register_rules from rpg_settings order by rpg_name desc, register_rules desc

Выдаёт следущее:

 

-------------+------------------+
---rpg_name--+--register_rules--+
------4------+--------1---------+
------3------+--------1---------+
------2------+--------5---------+
------2------+--------1---------+
------1------+--------1---------+

 

Это то, что вам нужно?

Ссылка на комментарий
Поделиться на других сайтах

2Heckfy

 

visits_count какого типа ?

Изменено пользователем Song
Ссылка на комментарий
Поделиться на других сайтах

Destruction

rpg_name desc, register_rules desc

так еще не пробовал, видимо да, надо будет простестировать)

надо еще заметить, что русский текст всегда выше, хоть у него visits_count меньше по сравнению с другим..

 

Song

visits_count INT UNSIGNED NOT NULL

оба значения одного типа INT.

Ссылка на комментарий
Поделиться на других сайтах

У меня вопрос.

Вот этот листинг:

 

USER----- stat_count ----- visits_count

user1---------57--------------- 453

юзер2--------45------------- 376

user3---------45 -------------- 762

user4----------9 -------------- 66

user5----------3-------------- 78

 

соответствует запросу с

..... ORDER BY stat_count, visits_count DESC LIMIT 0, 5

?

 

Потому что вроде как нет.

Ссылка на комментарий
Поделиться на других сайтах

не соответствует.

листинг создается таким запросом:

ORDER BY stat_count DESC LIMIT 0, 5

когда при таком запросе

ORDER BY stat_count, visits_count DESC LIMIT 0, 5

все идет в разброс и я не могу понять, как он их сортирует.

знаю точно, не так, как мне надо.

 

выяснилось еще, что сортируется не по нику, а по ID пользователя, чем они ниже, тем выше стоит в рейтинге.

Ссылка на комментарий
Поделиться на других сайтах

да млин да что ж мы гадаем ?

 

выложи листинг по запросу "ORDER BY stat_count, visits_count DESC LIMIT 0, 5", тогда глядя на него можно и догадки строить, ато непонятно кого ты мучаешься, себя или нас ?

Ссылка на комментарий
Поделиться на других сайтах

А как выбрать пользователей, имеющих одинаковые IP-адреса, например так:

[user] [ip]

12334 10.14.2.1

12332 10.14.2.1

Причем чтобы они отбирались отдельно от других, т.е. только пользователи с одинаковыми IP.

Вложенные запросы как всегда в php скриптах не работают, пока додумался до примитивного варианта выбирать юзеров по одинаковому IP, показывая последний зарегенный ник...

require_once ('inc/config.php');
mysql_connect("$host", "$user", "$password") or die("Could not connect to MySQL Server");
mysql_select_db("$db") or die("Could not select database");
$sql = "SELECT ip_address, name, id FROM $members GROUP BY ip_address HAVING count(*)>1";
$result = mysql_query($sql) or die("Could not execute the query");
$rows = mysql_num_rows($result);
  if ((!$rows) || ($rows < 1)) {
	echo "Nothing found"; }
  else	{
	   echo
	   '<table border="1" cellspacing="0" cellpadding="0" bordercolor="#993399" align="left"><tr>
	   <td width="70">ID</td>
	   <td width="110">Name</td>
	   <td width="100">IP</td></tr>';
  while($row = mysql_fetch_array($result)) {
	   $id = $row["id"];
	   $name = $row["name"];
	   $ip = $row["ip_address"];
	   echo
  "<tr>
  <td width=\"70\">$id</td>
  <td width=\"110\">$name</td>
  <td width=\"100\">$ip</td>
  </tr>";
  } }

 

А вот такого вида в php не работает..

SELECT ip_address, id, name FROM $table WHERE ip_address = ANY (SELECT ip_address FROM $table GROUP BY ip_address HAVING count(*)>1);

Изменено пользователем Felix
Ссылка на комментарий
Поделиться на других сайтах

Вложенные запросы не работают в MySQL.

 

Если хотите всех пользователей под данным IP, то в вашем while добавьте второй запрос

SELECT ip_address, id, name FROM $table WHERE ip_address = $row["ip_address"]

 

вот собственно так это все и решается пока.

Ссылка на комментарий
Поделиться на других сайтах

нет в MySQL до 5-ой версии вложенных запросов.

 

С пятой мне счастья поработать не представилось, так что про нее ничего сказать не могу.

Ссылка на комментарий
Поделиться на других сайтах

нет в MySQL до 5-ой версии вложенных запросов.

Поправка. До 4.1. В 5 уже триггера и хранимые процедуры обещают.

Ссылка на комментарий
Поделиться на других сайтах

А нам нужны ники всех кто имеют эти повторяющиеся ип.

ну дык можно и ники.

Вот тока что попробовал у себя на форуме:

SELECT author_name, ip_address, COUNT(ip_address) as tt 
FROM ibf_posts GROUP BY ip_address
HAVING tt > 1

Ссылка на комментарий
Поделиться на других сайтах

>> И там будут все ники или тоьлко один?

Все.

 

Ник ------ IP ----- кол-во_повторений

 

ну попробуй над своей базой, чего так просто усомнивляться? :))

 

Такой запрос нельзя в Оракле исполнить, в мускуле пожалуйста.

 

Хотя ты знаешь.. если будут два ника из-под одного IP, то они наверна сольются =)

Надо сделать GROUP BY ip_address, author_id

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.