Извините за мой неточный синтаксис. Новым для этого.
Мне нужно выбрать номера деталей в трех разных группах.
Различная 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 результатов
То, что вам нужно достичь, немного сложно точно понять, но похоже, что вы можете быть в порядке с полным 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} );
}
}
if
в цикле, проверяя , если результаты равны нулю перед печатью?New,Used,NOS
виде столбцов и хотите вернуть их в виде 3 отдельных строк?