Перейти к содержимому


Выбрать шаблон и создать сайт

Исключение повторений одного поля при запросе в MySql

#1 Avin

Avin
  • Пользователь
  • 82 сообщений
  • Репутация: 1
0

Отправлено 22 Февраль 2012 - 14:24

Здравеньки булы!

Как всегда, столкнулся с проблемой.

Существует таблица с полями id, type, text, cost

Необходимо построить запрос так, чтобы результат был такой:

type1
text1 cost1
text2 cost2
...
type2
text3 cost3
text4 cost4
...
и т.д.

У меня получилось сделать выборку с повторением type для каждой записи, а повторения быть не должно:


$sql = "SELECT * FROM price ORDER BY type" or die("не получилось!");

Прошу помощи!

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Php-запрос к MYSQL для вывода случайной строки
  2. Обработка уникальных полей в MySQL
  3. Запрос PHP+MySql по месяцам
  4. Атрибуты полей в MySQL
  5. Mysql_query не правильно делает запрос

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 22 Февраль 2012 - 15:09

Дамп таблицы выложите.
  • 0


#3 Avin

Avin
    Topic Starter
  • Пользователь
  • 82 сообщений
  • Репутация: 1

Отправлено 23 Февраль 2012 - 07:36

Вот дамп, данных немного :blink:

CREATE TABLE IF NOT EXISTS `price` (
  `id` smallint(10) NOT NULL AUTO_INCREMENT,
  `type` varchar(200) NOT NULL,
  `text` text NOT NULL,
  `cost` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `price`
--

INSERT INTO `price` (`id`, `type`, `text`, `cost`) VALUES
(1, 'Администрирование 1С', 'Добавление нового пользователя', '240'),
(2, 'Установка и настройка ОС и ПО', 'Клонирование ОС', '520'),
(3, 'Администрирование 1С', 'Перенос данных между БД', '410');

  • 0

#4 Светозар

Светозар
  • Пользователь
  • 62 сообщений
  • Репутация: 3

Отправлено 23 Февраль 2012 - 09:51

похожая тема тут: http://www.masterweb...u-dannih-iz-bd/
Постараюсь ответить там!
  • 0

#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 23 Февраль 2012 - 13:46

Эта тема больше относится к PHP. Кстати, аналогичную задачу решал там буквально недавно.
По базе. По хорошему не мешало бы ее нормализовать. В частности, поле type выносится в справочник. Ну да это частности :blink:
Вот код, откомментировал по максимуму:
<?php
mysql_connect("localhost", "root", "");
mysql_query("SET NAMES 'utf8'");
mysql_select_db("test");
$query = "SELECT * FROM price ORDER BY type";
$res = mysql_query($query);
$data = array();
while($row = mysql_fetch_assoc($res)){
    $data[] = $row; // получаем данные в массив
}
//print_r($data);
$group = $data[0]['type']; // выбираем первый тип и помещаем в переменную group
echo '<b>' .$group. '</b><hr>'; // выводим первый тип
/* проходимся по массиву */
foreach($data as $item){
    /* если текущий тип не совпадает с имеющимся в переменной group */
    if($group != $item['type']){
	    echo '<br><b>' .$item['type']. '</b><hr>'; // то выводим новый тип
	    $group = $item['type']; // и заносим новый тип в переменную group
    }
    /* если же текущий тип совпадает с имеющимся в переменной group, то цикл пропускаем */
    echo $item['text']. ' || '; // выводим текст
    echo $item['cost']. '<br>'; // выводим цену
}
?>
Результат на выходе:

Администрирование 1С
Добавление нового пользователя || 240
Перенос данных между БД || 410

Установка и настройка ОС и ПО
Клонирование ОС || 520


  • 1


#6 Avin

Avin
    Topic Starter
  • Пользователь
  • 82 сообщений
  • Репутация: 1

Отправлено 23 Февраль 2012 - 22:38

ОГРОМНЕЙШЕЕ СПАСИБО!

Премного благодарен Вам matroskin8 !
  • 0

#7 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 24 Февраль 2012 - 00:30

Пожалуйста :blink:
  • 0



Оформление форума – IPBSkins.ru