Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Место в рейтинге
 
 автор: chexov   (27.01.2010 в 02:20)   письмо автору
 
 

Доброе время суток!

Имеется таблица

CREATE TABLE IF NOT EXISTS `base` (
  `id` int(9) NOT NULL auto_increment,
  `votes` int(9) NOT NULL,
  PRIMARY KEY  (`id`)
) ;


И дамп данных таблицы `base`

INSERT INTO `base` (`id`, `votes`) VALUES
(1, 1),
(2, 3),
(3, 3),
(4, 1),
(5, 1),
(6, 10);


Требуется вывести первых 3 места, которые определяются по полю votes
Но! Нужно чтобы все id с одинаковыми знчениями votes указывались под одним местом а именно:

id:6 = 1 место
id:2,3 = 2 место
id:1,4,5 = 3 место



наткнулся на такую тему в поиске
http://softtime.ru/forum/read.php?id_forum=3&id_theme=70249
но она ничего не дала...

  Ответить  
 
 автор: а-я   (27.01.2010 в 02:43)   письмо автору
 
   для: chexov   (27.01.2010 в 02:20)
 

может что-то в этом роде?

<?
$sql 
'
SELECT
    GROUP_CONCAT(`id` ORDER BY `id` SEPARATOR ",") AS `ids`,
    `votes`
FROM
    `base`
GROUP BY `votes`
ORDER BY `votes` DESC
LIMIT 3
'
;
?>

  Ответить  
 
 автор: chexov   (27.01.2010 в 02:51)   письмо автору
 
   для: а-я   (27.01.2010 в 02:43)
 

подправил в месте
SEPARATOR ','

и все ок!

спасибо еще раз А-Я. Который раз уже выручаете...

  Ответить  
 
 автор: chexov   (27.01.2010 в 03:39)   письмо автору
 
   для: chexov   (27.01.2010 в 02:51)
 

А еще в дополнение к этому, дабы не создавать отдельной темы

CREATE TABLE IF NOT EXISTS `tname` ( 
  `id` int(9) NOT NULL auto_increment, 
  `names` text NOT NULL, 
  PRIMARY KEY  (`id`) 
) ; 


И дамп данных таблицы `tname `

INSERT INTO `tname` (`id`, `names`) VALUES 
(1, 'вася'), 
(2, 'петя'), 
(3, 'коля'), 
(4, 'толя'), 
(5, 'оля'), 
(6, 'юра');


как теперь выбрать из этой таблицы значения таблицы base ?

а именно:
юра = 1 место, у него 10 голос.
петя, коля =2 место, у него 3 голос.
вася, толя, оля =3 место, у него 1 голос.


я пробовал так:

<?
$q 
mysql_query("SELECT GROUP_CONCAT(`id` ORDER BY `id` SEPARATOR ',') AS `ids`, `votes` FROM `base` GROUP BY `votes` ORDER BY `votes` DESC LIMIT 3");
while(
$arr mysql_fetch_assoc($q))
  {
  ++
$i;
  
$ids explode(','$arr['ids']);
 
// Тут не понимаю как указать номер элемента массива
  
$names mysql_query("SELECT * FROM `tname` WHERE `id`='".$ids."'");
  
  echo  
$names." занял $i место, у него ".$arr['votes']." голос.<br>";
  }
?>

выводит:
Resource id #5 = 1 место, у него 10 голос.
Resource id #6 =2 место, у него 3 голос.
Resource id #7 = 3 место, у него 1 голос.

  Ответить  
 
 автор: а-я   (27.01.2010 в 03:49)   письмо автору
 
   для: chexov   (27.01.2010 в 03:39)
 

наверно уже можно просто сделать 3 запроса.. )

может так?

<?
$sql 

SELECT 
    GROUP_CONCAT(b.`names` ORDER BY a.`id` SEPARATOR ',') AS `names`, 
    a.`votes` 
FROM 
    `base` a
        JOIN
            `tname` b
        ON
            b.`id` = a.`id`
GROUP BY a.`votes` 
ORDER BY a.`votes` DESC 
LIMIT 3 
"
$ms mysql_query($sql);

    for( 
$i=1$row mysql_fetch_assoc($ms); $i++ ) 
    echo 
"$row[names] занял $i место, у него $row[votes] голосов.<br />\n";
?>

  Ответить  
 
 автор: chexov   (27.01.2010 в 03:55)   письмо автору
 
   для: а-я   (27.01.2010 в 03:49)
 

Гениально! Я думаю на этом все:) Спасибо огромное.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования