MySQL - Perl - Сортировать по - Как отобразить ABS (PartNum) DESC, но три разные (PartNum) категории? - PullRequest
0 голосов
/ 17 февраля 2011

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

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

Разное количество для каждой группы.

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

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 результатов

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

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

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

Спасибо ..

EDIT:

Строки моего Partstable выглядят как

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

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

Результаты New Stock 4

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

Подержанные Stock 10 результаты

1 Ответ

1 голос
/ 17 февраля 2011

То, что вам нужно для достижения, немного сложно точно понять, но похоже, что вы вполне могли бы справиться с полным 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} );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...