2

我在 MySQL 中有下表:

表名: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 不是很熟悉。请帮忙!

4

2 回答 2

1

图案:1l900fu

两个字符,后跟数字,然后是一些字母。

用于substr()获取前两个字母之后的字符串。

然后你将有900fu。

然后使用正则表达式只抓取数字,但不包括它遇到的第一个 alpha。这给你留下了:

900。

然后使用intval()

创建两个数组,如果intval()< 1000,则推送到第一个数组,否则,推送到第二个数组。

从这两个数组中构建您想要的输出。

还是因为某种原因你必须在 MySQL 中做所有事情?

于 2013-06-24T20:24:18.903 回答
0

我认为您正在寻找LENGTH()与 php 等效的 mysql 函数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
于 2013-06-24T20:43:22.447 回答