我有多个字段名称
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'
是否有任何数字?
由于
答案 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构建字符串的反馈感兴趣,因为我已经这样做了 - 这是我经常使用的一种结构,它感觉不够优雅和效率低,而且我对更好的方法感兴趣它