Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неверная сортировка / 9 сообщений из 9, страница 1 из 1
11.01.2014, 12:34:38
    #38522870
AccessDenied
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
Для начала все запросы на создание таблиц:
Из всех запросов удален DEFAULT CHARSET=utf8, потому что сначала грешил на кодировку.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
CREATE TABLE IF NOT EXISTS `jos_vm_product` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `vendor_id` int(11) NOT NULL DEFAULT '0',
  `product_parent_id` int(11) NOT NULL DEFAULT '0',
  `product_sku` varchar(64) NOT NULL DEFAULT '',
  `product_s_desc` varchar(50) DEFAULT NULL,
  `product_desc` text,
  `product_thumb_image` varchar(255) DEFAULT NULL,
  `product_full_image` varchar(255) DEFAULT NULL,
  `product_publish` char(1) DEFAULT NULL,
  `product_weight` decimal(10,4) DEFAULT NULL,
  `product_weight_uom` varchar(32) DEFAULT 'pounds.',
  `product_length` decimal(10,4) DEFAULT NULL,
  `product_width` decimal(10,4) DEFAULT NULL,
  `product_height` decimal(10,4) DEFAULT NULL,
  `product_lwh_uom` varchar(32) DEFAULT 'inches',
  `product_url` varchar(255) DEFAULT NULL,
  `product_in_stock` int(11) NOT NULL DEFAULT '0',
  `product_available_date` int(11) DEFAULT NULL,
  `product_availability` varchar(56) NOT NULL DEFAULT '',
  `product_special` char(1) DEFAULT NULL,
  `product_discount_id` int(11) DEFAULT NULL,
  `ship_code_id` int(11) DEFAULT NULL,
  `cdate` int(11) DEFAULT NULL,
  `mdate` int(11) DEFAULT NULL,
  `product_name` varchar(1024) DEFAULT NULL, /* Я не знаю почему тут такой варчар, если его выставить в 255, появится ошибка #1089 - Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys*/
  `product_sales` int(11) NOT NULL DEFAULT '0',
  `attribute` text,
  `custom_attribute` text NOT NULL,
  `product_tax_id` int(11) DEFAULT NULL,
  `product_unit` varchar(32) DEFAULT NULL,
  `product_packaging` int(11) DEFAULT NULL,
  `child_options` varchar(45) DEFAULT NULL,
  `quantity_options` varchar(45) DEFAULT NULL,
  `child_option_ids` varchar(45) DEFAULT NULL,
  `product_order_levels` varchar(45) DEFAULT NULL,
  `product_zakaz` char(1) NOT NULL,
  PRIMARY KEY (`product_id`),
  KEY `idx_product_vendor_id` (`vendor_id`),
  KEY `idx_product_product_parent_id` (`product_parent_id`),
  KEY `idx_product_sku` (`product_sku`),
  KEY `idx_product_ship_code_id` (`ship_code_id`),
  KEY `idx_product_name` (`product_name`(333))
) ENGINE=MyISAM COMMENT='All products are stored here.' AUTO_INCREMENT=7797 ;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE IF NOT EXISTS `jos_vm_category` (
  `category_id` int(11) NOT NULL,
  `vendor_id` int(11) NOT NULL DEFAULT '0',
  `category_name` varchar(128) NOT NULL DEFAULT '',
  `category_description` text,
  `category_thumb_image` varchar(255) DEFAULT NULL,
  `category_full_image` varchar(255) DEFAULT NULL,
  `category_publish` char(1) DEFAULT NULL,
  `cdate` int(11) DEFAULT NULL,
  `mdate` int(11) DEFAULT NULL,
  `category_browsepage` varchar(255) NOT NULL DEFAULT 'browse_1',
  `products_per_row` tinyint(2) NOT NULL DEFAULT '1',
  `category_flypage` varchar(255) DEFAULT NULL,
  `list_order` int(11) DEFAULT NULL,
  `date_updated` datetime NOT NULL,
  PRIMARY KEY (`category_id`),
  UNIQUE KEY `category_id` (`category_id`),
  KEY `idx_category_vendor_id` (`vendor_id`),
  KEY `idx_category_name` (`category_name`),
  KEY `category_id_2` (`category_id`)
) ENGINE=MyISAM COMMENT='Product Categories are stored here';


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE IF NOT EXISTS `jos_vm_product_category_xref` (
  `category_id` int(11) NOT NULL DEFAULT '0',
  `product_id` int(11) NOT NULL DEFAULT '0',
  `product_list` int(11) DEFAULT NULL,
  KEY `idx_product_category_xref_category_id` (`category_id`),
  KEY `idx_product_category_xref_product_id` (`product_id`),
  KEY `idx_product_category_xref_product_list` (`product_list`)
) ENGINE=MyISAM COMMENT='Maps Products to Categories';


Теперь очень сокращенный запрос на выборку:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
 `jos_vm_product`.`product_id`,
 `jos_vm_product`.`product_s_desc`,
 `jos_vm_product`.`product_name`,
 `jos_vm_product_category_xref`.`category_id`
 FROM `jos_vm_product`
 INNER JOIN `jos_vm_product_category_xref` ON (`jos_vm_product_category_xref`.`product_id` =`jos_vm_product`.`product_id`)
 INNER JOIN `jos_vm_category` ON (`jos_vm_product_category_xref`.`category_id` = `jos_vm_category`.`category_id` )
 WHERE `jos_vm_product_category_xref`.`category_id` = 29
 ORDER BY `jos_vm_product`.`product_name`
 LIMIT 200,50;


Теперь то, как оно должно выглядеть при сортировке по имени:



А теперь то, как оно выглядит:



В бд импортится через парсер, который работает только с utf8. Из 1С экспортом в csv сохраняет в 1251, потом с помощью LibreOffice сохраняем в utf8, понимаю что криво, но пока это некогда допиливать. Прошу помощи, если это невозможно, то хотя бы придумать причину, которую можно красиво объяснить директору.
Знаю что джумла, знаю что г-но, но пока вынужден ей заниматься.
...
Рейтинг: 0 / 0
11.01.2014, 12:46:26
    #38522878
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
Во-первых, не надо пользоваться говнофотохостингами с рекламой. Интереса их смотреть, поверьте, немного.
Если уж нельзя показать текстом, то сделайте скриншот в png-формате, сохраните его с 256 цветами (или даже меньше) и приложите к посту прямо здесь.

Во-вторых, у вас в запросе возвращается 4 поля, а на картинках 3 и 2, причем без заголовков. Какое из них называется product_name ?

В третьих, судя по графике вторая картинка получена из PHPMyAdmin. Попробуйте этот же запрос выполнить иначе, без использования PHPMyAdmin. Например, в консольном клиенте mysql.
...
Рейтинг: 0 / 0
11.01.2014, 12:54:13
    #38522884
AccessDenied
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
miksoft,
Извините, не знал что прямо сюда можно заливать картинку.

product_name - Лист рессорный и т.д. Возвращаемых полей и там четыре, просто так картинку обрезал.

В консоли возвращает то же самое, что и в phpmyadmin.
...
Рейтинг: 0 / 0
11.01.2014, 13:02:45
    #38522888
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
AccessDenied
Код: plsql
1.
2.
3.
4.
5.
  `product_name` varchar(1024) DEFAULT NULL, /* Я не знаю почему тут такой */
/*варчар, если его выставить в 255, появится ошибка #1089 - Incorrect prefix key; the used key part isn't a */
/*string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys*/
...
  KEY `idx_product_name` (`product_name`(333))

Тут-то все просто. В индексе указана длина префикса в скобках, ее нельзя указывать больше, чем длина поля. Т.е. то число, которое 1024, должно быть всегда не меньше, чем то, которое 333.
...
Рейтинг: 0 / 0
11.01.2014, 13:32:00
    #38522898
AccessDenied
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
miksoft,
Понял, но это мне никак не помогает отсортировать нормально =\
...
Рейтинг: 0 / 0
11.01.2014, 16:00:38
    #38522969
AccessDenied
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
AccessDenied, победил скрипт добавлением в запрос
Код: plsql
1.
GROUP BY `jos_vm_product`.`product_s_desc` 
...
Рейтинг: 0 / 0
11.01.2014, 16:17:29
    #38522979
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
В порядке бреда -
Код: sql
1.
 ORDER BY `jos_vm_product`.`product_name` collate utf8_general_ci



PS.AccessDeniedпричину, которую можно красиво объяснить директору.AccessDeniedджумла <...> г-но
...
Рейтинг: 0 / 0
11.01.2014, 17:33:36
    #38523030
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
AccessDeniedAccessDenied, победил скрипт добавлением в запрос
Код: plsql
1.
GROUP BY `jos_vm_product`.`product_s_desc` 

Это вы просто отсортировали по другому полю. И, возможно, нарушили логику запроса.
...
Рейтинг: 0 / 0
11.01.2014, 18:10:16
    #38523059
AccessDenied
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверная сортировка
miksoft,

Не возможно, а действительно нарушил, оно работает почти так как я хочу.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неверная сортировка / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]