如何在SQLite查询结果中显示自定义文本而非原始值?
实现自定义文本替换查询结果的方法
当然可以覆盖表中返回的值,显示自定义文本,下面给你两种常用的实现方式:
方法一:使用映射数组(适合固定替换规则)
先定义一个键值对数组,把数据库里的原始值作为键,对应的自定义文本作为值,循环输出时匹配替换即可。
修改后的代码如下:
<?php try { $conn = new PDO('sqlite:db/Mydatabase.db'); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT attributename, attributevalueEN, attributeimage FROM attributes ORDER BY attributename ASC"); $stmt->execute(); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // 自定义文本映射数组,按实际需要添加键值对 $customNameMap = [ "原始分组名1" => "自定义分组名称1", "原始分组名2" => "自定义分组名称2" ]; $customValueMap = [ "原始属性名1" => "自定义属性名称1", "原始属性名2" => "自定义属性名称2" ]; echo '<table style="width: 100%; padding-left: 2vw; padding-right: 2vw;">'; echo '<tr><th style="width: 20%; ">图标</th> <th style="width: 30%; ">属性</th> <th style="width: 50%; ">属性分组</th> </tr>'; if (!empty($data)) { foreach ($data as $row) { // 替换属性分组名:有自定义值则用,无则保留原始值 $showName = isset($customNameMap[$row['attributename']]) ? $customNameMap[$row['attributename']] : $row['attributename']; // 替换属性值:同理 $showValue = isset($customValueMap[$row['attributevalueEN']]) ? $customValueMap[$row['attributevalueEN']] : $row['attributevalueEN']; echo '<tr><td>'.'<img src="data:image/jpeg;base64,'.base64_encode($row['attributeimage']).'" style="width: 8vw; height: 8vw; " />'.'</td> <td>'. $showValue .'</td> <td>'. $showName .'</td> </tr>'; } } echo '</table>'; } catch(PDOException $e) { echo "错误: " . $e->getMessage(); } $conn = null; ?>
方法二:直接在SQL查询中替换(适合简单替换)
如果替换规则简单固定,可直接在SQL语句中用CASE WHEN定义替换逻辑,查询结果直接返回自定义文本,无需修改PHP输出代码:
SELECT CASE attributename WHEN '原始分组名1' THEN '自定义分组名称1' WHEN '原始分组名2' THEN '自定义分组名称2' ELSE attributename END AS attributename, CASE attributevalueEN WHEN '原始属性名1' THEN '自定义属性名称1' WHEN '原始属性名2' THEN '自定义属性名称2' ELSE attributevalueEN END AS attributevalueEN, attributeimage FROM attributes ORDER BY attributename ASC
选择建议
- 若替换规则需频繁修改或逻辑复杂,优先用方法一,只需修改映射数组,不用改动SQL。
- 若替换规则固定且简单,用方法二更高效,减少PHP层面的处理。
内容的提问来源于stack exchange,提问作者Szabolcs Horvath
相关产品推荐
相关产品推荐

