powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неверная сортировка
9 сообщений из 9, страница 1 из 1
Неверная сортировка
    #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
Неверная сортировка
    #38522878
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, не надо пользоваться говнофотохостингами с рекламой. Интереса их смотреть, поверьте, немного.
Если уж нельзя показать текстом, то сделайте скриншот в png-формате, сохраните его с 256 цветами (или даже меньше) и приложите к посту прямо здесь.

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

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

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

В консоли возвращает то же самое, что и в phpmyadmin.
...
Рейтинг: 0 / 0
Неверная сортировка
    #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
Неверная сортировка
    #38522898
AccessDenied
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Понял, но это мне никак не помогает отсортировать нормально =\
...
Рейтинг: 0 / 0
Неверная сортировка
    #38522969
AccessDenied
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AccessDenied, победил скрипт добавлением в запрос
Код: plsql
1.
GROUP BY `jos_vm_product`.`product_s_desc` 
...
Рейтинг: 0 / 0
Неверная сортировка
    #38522979
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В порядке бреда -
Код: sql
1.
 ORDER BY `jos_vm_product`.`product_name` collate utf8_general_ci



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

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

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


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