2013-06-24 3 views
2

Я следующую таблицу в MySQL:PHP Выберите и отдельные элементы

Название таблицы: all_items


item_no qty 
1l900fu 1 
1l950be 2 
1l1000bk 3 
1l1020rd 5 
1l1200fu 7 

мне нужно сделать два выбора, в котором он должен выводить два разных CSV файлы следующим образом:

CSV file 1          CSV file 2 
    item_no qty          item_no qty 
    1l900fu 1          1l1000bk 3 
    1l950be 2          1l1020rd 5 
                1l1200fu 7 

Согласно приведенной выше таблице, строка содержит цифры и буквы, так что я думал о выполнении strlen, но я не уверен, как поместить его внутри оператора запроса:

//CSV file 1 

$result = mysql_query("SELECT item_no, qty FROM all_items ORDER BY item_no Asc"); 

//Excuting Values from Mysql to CSV 
$row = 1; // 1-based index 
while($row_data = mysql_fetch_assoc($result)) { 

    $col = 0; 
//Row Values 
    foreach($row_data as $key=>$value) { 
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value); 
     $col++; 
    } 
    $row++; 
} 

Любая идея, как это может работать? Я хочу разделить item_no на основе strlen.

Извините, я не знаком с PHP. Пожалуйста помоги!

+0

вы можете использовать intval(), чтобы получить INT значение строки – Fallen

+0

Что 1000 см? Если это пороговое значение количества, то что же означает 'strlen'? –

+0

Забавный, похоже, что кто-то еще задал аналогичный вопрос ... http://stackoverflow.com/questions/17284386/mysql-compare-two-columns –

ответ

1

Выкройка: 1l900fu

Два символа, а затем номер, а затем несколько букв.

Используйте substr(), чтобы получить строку после первых двух букв.

Тогда у вас будет 900 фу.

Затем используйте регулярное выражение, чтобы получить только числовые значения, но не включая первую альфу, с которой они встречаются. Это оставляет вас с:

900.

Затем используйте intval()

Создать два массива, если intval() является < 1000, нажмите на первый массив, в противном случае, нажмите на второй массив.

Создайте свой выход, однако вы хотите, чтобы эти два массива.

или у вас есть что-то делать в MySQL по какой-то причине?

+0

Мог бы все это сделать с регулярным выражением, если бы вы хотели, чтобы вы знали, что он всегда начинается с двух символов перед номером. –

+0

Ваша идея работает. Что, если item_no like '12l1000bk' содержит два числа перед буквой. Я не думаю, что 'substr' будет правильным выбором? – Alihamra

+0

Затем описанный вами шаблон изменился. В этом случае единственный шаблон, который я вижу, - это: начиная с начала строки, продолжать, пока не найдет письмо, пропустив его, запишите все числа до тех пор, пока не включится альфа. Для решения вашей проблемы вам нужен надежный набор данных, регулярное выражение и 'preg_match()'. –

0

Я думаю, что вы ищете функцию mysql LENGTH(), которая является эквивалентом php strlen. Ваши запросы будут выглядеть следующим образом:

csv1:

SELECT item_no, qty, LENGTH(item_no) as length 
FROM all_items 
HAVING length = 7 
ORDER BY item_no ASC 

csv2:

SELECT item_no, qty, LENGTH(item_no) as length 
FROM all_items 
HAVING length = 8 
ORDER BY item_no ASC 
+0

Я пробовал вышеуказанный код, но получил следующую ошибку:' mysql_fetch_assoc() ожидает, что параметр 1 будет ресурсом, boolean given'. – Alihamra

+0

Мое плохое, '' '' '' '' '' '' 'курс. Поправлю мой ответ! – Pevara