|
|
|
| Доброе время суток!
Имеется таблица
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
но она ничего не дала... | |
|
|
|
|
|
|
|
для: 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
';
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(27.01.2010 в 02:43)
| | подправил в месте
и все ок!
спасибо еще раз А-Я. Который раз уже выручаете... | |
|
|
|
|
|
|
|
для: 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 голос.
|
| |
|
|
|
|
|
|
|
для: 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";
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(27.01.2010 в 03:49)
| | Гениально! Я думаю на этом все:) Спасибо огромное. | |
|
|
|