2010-08-18 3 views
-3

вы можете сказать, как изменить этот результат в PHP и тузд сценария:PHP: как изменить строковые данные становятся числовые данные

Model     Class 
Ball      S 
Book      A 
Spoon 
Plate      B 
Box       C 

это мой DB:

CREATE TABLE IF NOT EXISTS `inspection_report` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `Model` varchar(14) NOT NULL, 
    `Serial_number` varchar(8) NOT NULL, 
    `Lot_no` varchar(6) NOT NULL, 
    `Line` char(5) NOT NULL,  
    `Class` char(1) NOT NULL, 
    `Status` varchar(6) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `Model` (`Model`,`Serial_number`,`Lot_no`,`Line`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=48 ; 

как если я хочу чтобы показать результат, подобный:

Model   s  a  b  c 
Ball   1  0  0  0 
Book   0  1  0  0 
Spoon   0  0  0  0 
Plate   0  0  1  0 
Box    0  0  0  1 

Что такое запрос? Благодарю.

+1

Вы хотите подсчитывать все результаты, или вы действительно хотите только показать 1 или 0. Просьба уточнить ваш вопрос немного больше. Вы не говорите, хотите ли вы, чтобы результат запроса находился в этой форме, или если это правильно, чтобы использовать php для форматирования результата. –

+0

Мне просто нужно показать 1 или 0, например, мой пример – klox

+0

Какова связь между классом и моделью? –

ответ

1
SELECT `Model`, 
IF(`Class`='S', 1, 0) AS `S`, 
IF(`Class`='A', 1, 0) AS `A`, 
IF(`Class`='B', 1, 0) AS `B`, 
IF(`Class`='C', 1, 0) AS `C` 
FROM `inspection_report` 
+0

woohooo..that - простой ответ, но очень-очень классный..и пропустите его .. многое ... – klox

+0

Благодарю. У полковника Шрапнела есть точка. Мне остается непонятно, зачем вам это нужно. – Mischa

+0

yups i спасибо вам всем. Причина, почему мне это нужно, потому что, если персонаж изменился на цифры, он будет вычисляться. который, если он найден в поле «s» номер один или ноль, будет умножен на 4.you знаю, что я схожу с ума bcoz эта проблема около двух недель.fiuh.doumo arigatou gozaimasu. – klox

0

Ваш вопрос немного неясен, но я предполагаю, что у вас есть входные данные в имени сопоставления массива для дефекта, и вы хотите, чтобы каждая строка a 1 в соответствующем столбце и нуль всюду. Если да, то это именно так:

$arr = array('blue' => 'S', 'red' => 'A', 'yellow' => null, 'green' => 'B', 'black' => 'C'); 

$defects = array_filter(array_unique(array_values($arr))); 
echo "name\t"; 
echo implode("\t", $defects); 
echo "\n"; 

foreach($arr as $name => $defect) { 
    echo "$name"; 
    foreach($defects as $test) { 
     echo "\t"; 
     echo $test == $defect ? 1 : 0; 
    } 
    echo "\n"; 
} 
+0

Почему цитаты в 'echo '$ name" '? – deceze

+0

@deceze Первоначально он был «эхом» $ name \ t ";'; Я изменил его и не удалил их –

+0

Я вижу, это просто один из моих любимых мобов ...;) – deceze

0

Очень грубо, вы, вероятно, побывали бы с таблицами HTML в действительности.

<?php // $rows = array(array('name' => 'blue', 'class_defect' => 'S'), ...); ?> 

<pre> 
name  s a b c 
<?php 
foreach ($rows as $row) { 
    printf('%-10s', $row['name']); // padding with spaces 
    foreach (array('s', 'a', 'b', 'c') as $col) { 
     echo (strtolower($row['class_defect']) == $col) ? 1 : 0; 
     echo ' '; // just padding again 
    } 
} 
?> 
</pre>