[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из таблицы n-значений
Fanamura
Допустим есть таблица:
SQL
--
-- Структура таблицы `jos_joomleague_chara`
--

CREATE TABLE IF NOT EXISTS `jos_joomleague_chara` (
`id` int(11) NOT NULL auto_increment,
`id_hock` tinyint(11) NOT NULL,
`pyatak` tinyint(4) NOT NULL default '0',
`bort` tinyint(4) NOT NULL default '0',
`cheki` tinyint(4) NOT NULL default '0',
`kombi` tinyint(4) NOT NULL default '0',
`skorost` tinyint(4) NOT NULL default '0',
`sila` tinyint(4) NOT NULL default '0',
`vinosl` tinyint(4) NOT NULL default '0',
`dalnbro` tinyint(4) NOT NULL default '0',
`blibro` tinyint(4) NOT NULL default '0',
`starat` tinyint(4) NOT NULL default '0',
`master` tinyint(4) NOT NULL default '0',
`neravn` tinyint(4) NOT NULL default '0',
`comment` text NOT NULL,
`ip` mediumtext NOT NULL,
`vote_rating` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=37 ;

С третьей до comment столбца заносятся данные, ввиде 1 или 0, назовем их умениями.

Задача, вывести, допустим 5 умений, у которых наибольшее количество "голосов". Подскажите, пожалуйста.

Писал
PHP
$query "SELECT COUNT(*) FROM jos_joomleague_chara WHERE id_hock = $_GET[pid]";
            
$result=mysql_query($query);
            while(
$r=mysql_fetch_array($result)) {

Дальше дело не продвинулось, шел, что называется, не туда.



Спустя 20 минут, 25 секунд (2.08.2009 - 19:33) Guest написал(а):
Вот нашел:
http://www.php.su/mysql/manual/?page=Mathematical_functions
GREATEST(X,Y,...)
Возвращает наибольший (с максимальным значением) аргумент. Сравнение аргументов происходит по тем же правилам, что и для LEAST:
mysql> SELECT GREATEST(2,0);

А как же написать это на php?
PHP
$query "SELECT GREATEST (*) FROM jos_joomleague_chara WHERE id_hock = $_GET[pid]";
            
$result=mysql_query($query);

А дальше?

Спустя 13 минут, 15 секунд (2.08.2009 - 19:46) Raito-kun написал(а):
Ничерта не понял. У умений 1 характеристика (0 или 1). Как ты хочешь вынести 5 умений "с наибольшим количеством голосов"? И где мы должны узнать у какого из умений сколько голосов?

Спустя 10 минут, 9 секунд (2.08.2009 - 19:57) Krevedko написал(а):
та да...тут видимо есть связь 1 ко многим.

Спустя 9 часов, 53 минуты, 2 секунды (3.08.2009 - 05:50) Guest написал(а):
Ну вот допустим, получаются колонки
1 0 1 1 1 1 1 0 0 1 0 1
0 1 1 1 1 1 0 0 0 0 1 1
1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 0

Нам нужно считать сколько в каждом столбце получилось

Спустя 4 часа, 53 минуты, 6 секунд (3.08.2009 - 10:43) Alchemist написал(а):
ИМХО, использовать SUM() для нахождения кол-ва каждого умения, а максимум находить уже в пхп циклом или через связку array_search(max())

Спустя 9 часов, 51 минута, 8 секунд (3.08.2009 - 20:34) Guest написал(а):
Продвинулся заметно дальше smile.gif
PHP
<?php
            
function cmp($a$b
{
    if (
$a == $b) {
        return 
0;
    }
    return (
$a $b) ? -1;
}
            
$query "SELECT SUM(pyatak) ,SUM(bort) ,SUM(cheki) ,SUM(kombi) ,SUM(skorost) ,SUM(sila) ,SUM(vinosl) ,SUM(dalnbro) ,SUM(blibro) ,SUM(starat) ,SUM(master) ,SUM(neravn) FROM jos_joomleague_chara WHERE id_hock = $_GET[pid]";
            
$result=mysql_query($query);

            while(
$row mysql_fetch_array($result))
  {
  
$a = array($row['0'],
             
$row['1'],
             
$row['2'],
             
$row['3'],
             
$row['4'],
             
$row['5'],
             
$row['6'],
             
$row['7'],
             
$row['8'],
             
$row['9'],
             
$row['10'],
             
$row['11']);
/*  $a = array($row['0']=>'Игра на пяточке',
             $row['1']=>'Игра у борта',
             $row['2']=>'Силовые приемы',
             $row['3']=>'Комбинационная игра',
             $row['4']=>'Скорость',
             $row['5']=>'Сила',
             $row['6']=>'Выносливость',
             $row['7']=>'Дальние броски',
             $row['8']=>'Ближние броски',
             $row['9']=>'Старательность',
             $row['10']=>'Мастеровитость',
             $row['11']=>'Игра в неравных составах');*/

uasort($a"cmp");
$x=1;
while (list(
$key$value) = each($a)) {
    echo 
"$key: $value <br />";
}


  }
            

Выводит примерно следующее:
10: 2
0: 2
1: 2
9: 1
11: 1
8: 1
5: 1
3: 1
4: 1
6: 1
2: 0
7: 0
т.е. ТО, ЧТО НУЖНО smile.gif
Но, есть загвоздка, первый столбцы должны иметь свои названия, тот код, что закомментирован носит эти названия, но применять его мне нельзя, ибо получаем не только ПО ОДНОЙ записи с наибольшим значением, т.е.:
2 - тут умение
1 - тут умение
0 - тут умение

Вопрос, как присвоить значения ключам или переделать функцию под мои нужды?

Спустя 13 минут, 11 секунд (3.08.2009 - 20:47) Fanamura написал(а):
Это я писал, извините за орфографию, перепишу лучше.
Продвинулся заметно дальше:
PHP
<?php
            
function cmp($a$b
{
    if (
$a == $b) {
        return 
0;
    }
    return (
$a $b) ? -1;
}
            
$query "SELECT SUM(pyatak) ,SUM(bort) ,SUM(cheki) ,SUM(kombi) ,SUM(skorost) ,SUM(sila) ,SUM(vinosl) ,SUM(dalnbro) ,SUM(blibro) ,SUM(starat) ,SUM(master) ,SUM(neravn) FROM jos_joomleague_chara WHERE id_hock = $_GET[pid]";
            
$result=mysql_query($query);

            while(
$row mysql_fetch_array($result))
  {
  
$a = array($row['0'],
             
$row['1'],
             
$row['2'],
             
$row['3'],
             
$row['4'],
             
$row['5'],
             
$row['6'],
             
$row['7'],
             
$row['8'],
             
$row['9'],
             
$row['10'],
             
$row['11']);
/*  $a = array($row['0']=>'Игра на пяточке',
             $row['1']=>'Игра у борта',
             $row['2']=>'Силовые приемы',
             $row['3']=>'Комбинационная игра',
             $row['4']=>'Скорость',
             $row['5']=>'Сила',
             $row['6']=>'Выносливость',
             $row['7']=>'Дальние броски',
             $row['8']=>'Ближние броски',
             $row['9']=>'Старательность',
             $row['10']=>'Мастеровитость',
             $row['11']=>'Игра в неравных составах');*/

uasort($a"cmp");
$x=1;
while (list(
$key$value) = each($a)) {
    echo 
"$key: $value <br />";
}


  }

Выводит примерно следующее:
10: 2
0: 2
1: 2
9: 1
11: 1
8: 1
5: 1
3: 1
4: 1
6: 1
2: 0
7: 0
т.е. ТО, ЧТО НУЖНО
Но, есть загвоздка, первый столбец должен быть в виде названий умений, тот код, что закомментирован носит эти названия, но применять его мне нельзя, ибо получаем мы только ПО ОДНОЙ записи с наибольшим значением, т.е.:
тут умение -2
тут умение -1
тут умение -0

Это собственно и написано в функции:(
Нужно, чтобы было так:

Игра на пяточке - 2
Мастеровитость - 2
Дальние броски - 2
Ближние броски - 1
и т.д.

Вопрос, как присвоить значения ключам или переделать функцию под мои нужды?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.