CONCAT n VALUES

时间:2015-03-11 19:08:41

标签: php mysql

我有多个字段名称

custom_1_field
custom_2_field
custom_3_field
.
.
custom_N_field

我永远不知道custom_N_fields有多少。我需要把所有这些都搞定。

如果我知道我有多少字段

,我可以使用这段代码
CONCAT_WS(' ',custom_1_field,CONCAT('<hr>',custom_2_field)) AS new_field

但如果我不知道我有多少N custom_N_fields,我该怎么办?

CONCAT custom_N_fields之类的内容,'N'是否有任何数字?

编辑:我使用php + sql

由于

2 个答案:

答案 0 :(得分:0)

这很奇怪,但是应该这样做 - 首先查找字段列表,然后将每个与您的模式匹配的字段放入CONCAT(...)列:

<?php
$sql = 'SELECT CONCAT_WS(" "';
$q = mysqli_query($conn, 'DESCRIBE tablename');
while ($row = mysqli_fetch_array($q, MYSQLI_ASSOC))
    if (preg_match("/custom_\d+_field/", $row['Field']))
        $sql .= ",".$row['Field'];
$sql .= ') AS new_field';
# $sql .= "FROM someTable WHERE x = y";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($q, MYSQLI_ASSOC)) {
    # do stuff with $row['new_field']
}
?>

看起来你想在那里使用<hr>标签做一些事情 - 扩展这个例子应该是相对简单的。

答案 1 :(得分:0)

如果您不喜欢我上面提到的SQL答案,那么您很容易(很多 更容易!)解决PHP(或您正在使用的任何编程平台)中的问题。只需执行查询并从第一次获取的结果查询中获取字段列表,然后从这些字段构造字符串。像这样:

$sql = 'SELECT ...';
$results = mysqli_query($conn, $sql);
$field_list = array();
while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
    if (!$field_list) {
        $field_list = preg_grep('/^custom_\d+_field$/', array_keys($row));
    }
    // work with $row until you need the concatenated field...
    // then use this snippet to construct the concatenated field
    $newstr = $sep = '';
    foreach ($field_list as $f) {
        $newstr = $sep.$row[$f];
        $sep = ' '; // this will be put in front of all the rest of the fields
    }
    // now echo your $newstr or whatever you want to do with it
}

我会对其他人使用$ sep构建字符串的反馈感兴趣,因为我已经这样做了 - 这是我经常使用的一种结构,它感觉不够优雅和效率低,而且我对更好的方法感兴趣它