MySQL - Perl - Сортировать по - Как отобразить ABS (PartNum) DESC, но три разные (PartNum) категории?

0

Извините за мой неточный синтаксис. Новым для этого.

Мне нужно выбрать номера деталей в трех разных группах.

Различная qty для каждой группы.

Каждая группа индивидуально сортирует ABS desc.

my $fromrow = CGI::param('from');## vague but put here to show a sort of pagination  ## 
my $nextrow = CGI::param('next');
my $grabpartnumbers = $hookup->prepare(qq{
   SELECT `New`,`Used`,`NOS`,`PartNum`,`Description`,`Price`
   FROM `Partstable`
   WHERE `instock` = ? AND `QTY` > ? AND `New` = ?
   ORDER BY ABS(PartNum) LIMIT ?,?});
$grabpartnumbers->execute('1','10','1',$fromrow,$nextrow);
while(@row = $grabpartnumbers->fetchrow_array()) {
#do stuff

Хорошо работает, для одного столбца, например "Новый". Тем не менее, я хочу отобразить как:

Новые акции 4 результата

NOS 6 результатов

Использованные запасы 10 результатов

Дополнительные проблемы возникнут для меня, когда у одного из трех столбцов больше нет данных для отображения. В этот момент я просто хочу отобразить оставшийся результат или ничего (даже заголовок заголовка), если результаты = 0 для этого кота.

Возможно ли это, или мне нужно подготовить три разных запроса и, возможно, вставить их в свои собственные массивы, чтобы расшифровать, что отображать в некоторых циклах?

Это ОЧЕНЬ продвинуто для меня так, пожалуйста, будьте подробными с примерами. (глупо до моего уровня понимания (-;)

Спасибо..

EDIT:

Мои строки Partstable выглядят как

   ID|PartNum|New|Used|NOS|Qty|instock|Description|Price
    1|132452 |1  |0   |0  | 24|y      |12ax7 yada |3.00

Я хочу отобразить три "области" на одной странице по порядку "важность". "Новые" имеют приоритет.

Новые запасы 4 результата

Результаты NOS 6

Использованные запасы 10 результатов

  • 0
    Пожалуйста, уточните, что вы хотите. Вы, кажется, путаете строки со столбцами. Какова структура таблицы? Можете привести пример? Ваша проблема решается с помощью , if в цикле, проверяя , если результаты равны нулю перед печатью?
  • 0
    Для меня это тоже очень продвинуто. Вы храните New,Used,NOS виде столбцов и хотите вернуть их в виде 3 отдельных строк?
Показать ещё 1 комментарий
Теги:
sorting

1 ответ

1
Лучший ответ

То, что вам нужно достичь, немного сложно точно понять, но похоже, что вы можете быть в порядке с полным SQL-решением (умное использование GROUP BY и т.д.).

Что касается текущего решения с Perl и предполагая, что я правильно понимаю ваш пример, что-то вроде этого будет служить отправной точкой для вас, чтобы вы могли поиграть и адаптироваться к фактическому набору данных.

Предупреждение: код проверен только на синтаксис!

my $fromrow = CGI::param('from');## vague but put here to show a sort of pagination  ## 
my $nextrow = CGI::param('next');

# Columns of interest, sorted by descending order of importance
my @interesting_columns = qw(
    New
    Used
    NOS
    PartNum
    Description
    Price
);

my $interesting_columns_expr = join(', ', map { $_ = "`$_`" } @interesting_columns);
my $grabpartnumbers = $hookup->prepare(qq{
    SELECT $interesting_columns_expr
    FROM `Partstable`
    WHERE `instock` = ? AND `QTY` > ? 
    ORDER BY ABS(PartNum) LIMIT ?,?
});
$grabpartnumbers->execute('1','10',$fromrow,$nextrow);

# Compute results
my %result_counter;
while ( my $row = $grabpartnumbers->fetchrow_hashref() ) {
    foreach my $column_name ( keys %$row ) {
        $result_counter{$column_name} += $row->{$column_name};
    }
}

# Display results
for my $column_name ( @interesting_columns ) {
    if (exists $result_counter{$column_name}) {
        print join( ':', $column_name, $result_counter{$column_name} );
    }
}
  • 0
    Я думаю, что понимаю это в определенной степени. Я поиграю с этим сегодня вечером и завтра поковыряюсь, если я застряну. Я буду рад проверить, как ответили, когда я расшифрую немного. Похоже, мне нужно будет установить там некоторые переменные, чтобы получить нужные мне значения. Очень продвинутый, но я понимаю кое-что из этого. Огромное спасибо.
  • 0
    Что ж, это полезно, но я не могу получить нужные мне результаты, поскольку я не способен изменить это в соответствии с моими потребностями. Совершенно моя слабость, поэтому мне придется отображать данные по-другому. Большое спасибо за это, я поместил это в свой шпаргалку на будущее, я стану достаточно продвинутым, чтобы манипулировать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню