SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.01.2008 07:18:19

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

DISTINCT и GROUP. Не работает сортировка

Парни памагите вот в такой ситуации. Есть таблица otech, в ней  есть поле firma. В поле firma около 30 строк, ну например вот так:

ВАЗ
ВАЗ
ВАЗ
ВАЗ
ВАЗ
ВАЗ
ВАЗ
ГАЗ
ПАЗ

Я хачу выбрать тока уникальные записи + указать напротив уникальной строки количество таких строк в таблице
То есчть хачу чтобы стало вот так:

ВАЗ - 7
ГАЗ - 1
ПАЗ - 1

Но у мну чё тв не палучается. А делаю я всё вот так:

<?php
$query = mysql_query("SELECT DISTINCT firma FROM otech");
$num = mysql_num_rows($query);
for ($i = 1;$i <= $num; $i++)
  {
    $fetch = mysql_fetch_array($query);
    $q = mysql_query("SELECT * FROM otech WHERE firma = '$fetch[firma]'");
    $n = mysql_num_rows($q);
    echo "$fetch[firma] - $n";
  }
?>

Этим скриптом выводится тока:

ВАЗ - 8
ПАЗ - 1

То есть ГАЗ приплюсовывается к ВАЗам %)

попробовал вот так. всё в скрипте тоже самае тока тока изменил запрос выборки

$query = mysql_query("SELECT ALL firma FROM otech GROUP BY firma");

Выводится тоже самое: ВАЗ и ГАЗ вместе, ПАЗ отдельно. Думаю, ну ладна, не буду груприровать, пасмотрим чё выдаст. Исплавляю выбарку вот так:

$query = mysql_query("SELECT ALL firma FROM otech");

Тада он мне выводит вот так:

ВАЗ - 8
ВАЗ - 8
ВАЗ - 8
ВАЗ - 8
ВАЗ - 8
ВАЗ - 8
ВАЗ - 8
ГАЗ - 8
ПАЗ - 1

То есть он (mysql) видит его, но не считает что ГАЗ чем то толичается от ВАЗа)) Я сначала падумал, что вазможно это всё из-за столь короткой длинны слов (ВАЗ и ГАЗ), но патом абратил внимание что ПАЗ то он всё же атличил от ВАЗов и ГАЗов)) Ребят, опыта мало! Пацкажыте!

Неактивен

 

#2 12.01.2008 11:59:27

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: DISTINCT и GROUP. Не работает сортировка

Попробуйте так

$sql = "SELECT firma, count(*) c from otech GROUP BY firma";
.....
while(...) {
    echo "$fetch[firma] - $fetch[c]";
}

Если упорно не отличает слова, значит у Вас неправильная кодировка данных в таблице. Что у Вас дает SHOW CREATE TABLE firma; ?

Отредактированно rgbeast (13.01.2008 19:04:09)

Неактивен

 

#3 13.01.2008 18:51:32

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

rgbeast, пажалуста напиши полностью PHP код без многоточий, там же немного)
на счёт

rgbeast написал:

SHOW CREATE TABLE firma;

Возможно ты имел ввиду SHOW CREATE TABLE otech;, тк название таблицы у меня именно otech, а не firma. Так вот запрос типа  SHOW CREATE TABLE otech; даёт

| otech | CREATE TABLE `otech` (
  `id` int(11) NOT NULL auto_increment,
  `firma` tinytext NOT NULL,
  `model` tinytext NOT NULL,
  `year` int(11) NOT NULL default '0',
  `color` tinytext NOT NULL,
  `v` varchar(100) NOT NULL default '',
  `rule` tinytext NOT NULL,
  `kuzov` varchar(100) NOT NULL default '',
  `fuel` tinytext NOT NULL,
  `comment` tinytext NOT NULL,
  `hide_comment` tinytext NOT NULL,
  `phone_num` tinytext NOT NULL,
  `client_name` tinytext NOT NULL,
  `client_price` tinytext NOT NULL,
  `our_price` int(11) NOT NULL default '0',
  `date_add` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM |

Неактивен

 

#4 13.01.2008 19:03:49

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: DISTINCT и GROUP. Не работает сортировка

$sql = "SELECT firma, count(*) c from otech GROUP BY firma";
$result = mysql_query($sql) or die(mysql_error());
while($fetch = mysql_fetch_assoc($result)) {
    echo "$fetch[firma] - $fetch[c]";
}

У Вас ничего не сказано про кодировку таблицы. Какая версия MySQL?

Неактивен

 

#5 13.01.2008 19:41:23

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: DISTINCT и GROUP. Не работает сортировка

Судя по тому, что написано TYPE, а не ENGINE, наверное, < 4.1..

leet, какой результат выдает запрос SELECT VERSION(); ?

Неактивен

 

#6 13.01.2008 22:19:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: DISTINCT и GROUP. Не работает сортировка

Угу, именно так.  В какой кодировке Вы сохраняете данные?

Имеет смысл на старых MySQL оставаться в пределах однобайтовых
кодировок (cp1251 или koi8r) или обновляться на новую версию
MySQL.

На 4.0 нужно обязательно указывать правильную кодировку  для
таблицы, т.к. группировка напрямую связана с сортировкой данных,
а сортирует он (если не знает правильную кодировку) в неверном
порядке.

Неактивен

 

#7 14.01.2008 06:34:22

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

ребят, саздавал таблицу при помощи MySQL Control Center. На тот момент версия мускула была 3.2*.** точно не помню.
Недавна паверх этого паставил мускул 4.1
paulus, про кодировку васче не в курсе..

Неактивен

 

#8 14.01.2008 10:56:15

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

rgbeast написал:

$sql = "SELECT firma, count(*) c from otech GROUP BY firma";
$result = mysql_query($sql) or die(mysql_error());
while($fetch = mysql_fetch_assoc($result)) {
    echo "$fetch[firma] - $fetch[c]";
}

К сожалению и это не помагает

Неактивен

 

#9 14.01.2008 11:38:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: DISTINCT и GROUP. Не работает сортировка

Тогда советую начать со статьи smile

Неактивен

 

#10 14.01.2008 13:38:40

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

а как сделать дамп базы из под винды ?

Неактивен

 

#11 14.01.2008 17:39:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: DISTINCT и GROUP. Не работает сортировка

mysqldump

В Windows тоже есть консоль, чтобы до нее достучаться, надо нажать Пуск->Выполнить
и там написать "cmd".

Неактивен

 

#12 15.01.2008 07:45:36

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

paulus, я установил MySQL 5. Действительно проблема в кодировке. ВАЗ и ГАЗ в кодировке latin1 выглидят одинакова - ÂÀÇ. Я сделал дамп базы, абисните мне даходчиво как мне сменить перекодировать, и в какую кодировку. Исходя из статьи я сделал

shell> recode utf8..latin1 mydb.sql

но я то делаю всё из под винды и ана мне грит

C:\Documents and Settings\Админ>recode
"recode" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Неактивен

 

#13 15.01.2008 09:29:31

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

ха! пачка, установил мускул 5, затем удалил... Затем апять установил и кадировка сама как то сканвертировалась)) Ребят, всем атазвавшимся - спасиб!

Неактивен

 

#14 15.01.2008 13:32:27

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: DISTINCT и GROUP. Не работает сортировка

команды recode в винде нет, но есть программы, которые позволяют перекодировать, например Штирлиц, uni_cyr и другие

Неактивен

 

#15 15.01.2008 13:54:13

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

блин, терь другая проблема. Кароч каким то образом у меня сбился "Следующий Autoindex". Все кароч до 5-го мускула работало нармал и записи дабавлялись без проблем. И вот после инсталла мускула5 я решил дабавить запись через веб форму. Выдало ошибку Out of range value adjusted for column 'id' at row 1. Ну я пасмарел-пасмарел. И через phpmyadmin увидел что Следующий Autoindex = 11,112 О_о. А типерь внимание вапрос (буммммммм! /гонг как в "что?где?когда?/) Аткуда взялся такой автоиндекс и как его вернуть к прежнему виду ? Из 6-ти таблиц автоиндекс сбился тока в одной

Неактивен

 

#16 15.01.2008 20:27:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: DISTINCT и GROUP. Не работает сортировка

alter table xxx auto_increment=10

Неактивен

 

#17 16.01.2008 07:46:36

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

paulus, инкримент установил. Но всё равно выдаёт вот такую ашибку

Out of range value adjusted for column 'id' at row 1

вот на такой запрос

INSERT INTO inomarki VALUES('', 'nissan', 'wingroad', '2001', 'белый', '1', 'right', 'седан', 'бензин', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', 'xxx', NOW())

Неактивен

 

#18 16.01.2008 08:05:22

leet
Участник
Зарегистрирован: 12.01.2008
Сообщений: 10

Re: DISTINCT и GROUP. Не работает сортировка

фсё, разабрался)) Нада для поля куда будет базой вписываца автоинкримент ставить NULL. Пральна ?)

Неактивен

 

#19 16.01.2008 19:05:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: DISTINCT и GROUP. Не работает сортировка

Да, правильно smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson