Задавайте вопросы, мы ответим
Вы не зашли.
Парни памагите вот в такой ситуации. Есть таблица 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) видит его, но не считает что ГАЗ чем то толичается от ВАЗа)) Я сначала падумал, что вазможно это всё из-за столь короткой длинны слов (ВАЗ и ГАЗ), но патом абратил внимание что ПАЗ то он всё же атличил от ВАЗов и ГАЗов)) Ребят, опыта мало! Пацкажыте!
Неактивен
Попробуйте так
$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)
Неактивен
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 |
Неактивен
$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?
Неактивен
Судя по тому, что написано TYPE, а не ENGINE, наверное, < 4.1..
leet, какой результат выдает запрос SELECT VERSION(); ?
Неактивен
Угу, именно так. В какой кодировке Вы сохраняете данные?
Имеет смысл на старых MySQL оставаться в пределах однобайтовых
кодировок (cp1251 или koi8r) или обновляться на новую версию
MySQL.
На 4.0 нужно обязательно указывать правильную кодировку для
таблицы, т.к. группировка напрямую связана с сортировкой данных,
а сортирует он (если не знает правильную кодировку) в неверном
порядке.
Неактивен
ребят, саздавал таблицу при помощи MySQL Control Center. На тот момент версия мускула была 3.2*.** точно не помню.
Недавна паверх этого паставил мускул 4.1
paulus, про кодировку васче не в курсе..
Неактивен
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]";
}
К сожалению и это не помагает
Неактивен
а как сделать дамп базы из под винды ?
Неактивен
mysqldump
В Windows тоже есть консоль, чтобы до нее достучаться, надо нажать Пуск->Выполнить
и там написать "cmd".
Неактивен
paulus, я установил MySQL 5. Действительно проблема в кодировке. ВАЗ и ГАЗ в кодировке latin1 выглидят одинакова - ÂÀÇ. Я сделал дамп базы, абисните мне даходчиво как мне сменить перекодировать, и в какую кодировку. Исходя из статьи я сделал
shell> recode utf8..latin1 mydb.sql
но я то делаю всё из под винды и ана мне грит
C:\Documents and Settings\Админ>recode
"recode" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Неактивен
ха! пачка, установил мускул 5, затем удалил... Затем апять установил и кадировка сама как то сканвертировалась)) Ребят, всем атазвавшимся - спасиб!
Неактивен
команды recode в винде нет, но есть программы, которые позволяют перекодировать, например Штирлиц, uni_cyr и другие
Неактивен
блин, терь другая проблема. Кароч каким то образом у меня сбился "Следующий Autoindex". Все кароч до 5-го мускула работало нармал и записи дабавлялись без проблем. И вот после инсталла мускула5 я решил дабавить запись через веб форму. Выдало ошибку Out of range value adjusted for column 'id' at row 1. Ну я пасмарел-пасмарел. И через phpmyadmin увидел что Следующий Autoindex = 11,112 О_о. А типерь внимание вапрос (буммммммм! /гонг как в "что?где?когда?/) Аткуда взялся такой автоиндекс и как его вернуть к прежнему виду ? Из 6-ти таблиц автоиндекс сбился тока в одной
Неактивен
alter table xxx auto_increment=10
Неактивен
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())
Неактивен
фсё, разабрался)) Нада для поля куда будет базой вписываца автоинкримент ставить NULL. Пральна ?)
Неактивен
Да, правильно
Неактивен