- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前有一个 sql 和 php 问题,我使用此语句从服务及其关联表中获取所有内容:
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select', 'a.*'
)
);
$query->from('`#__services_service` AS a');
$query->where("a.zone");
$query->select('zone.name AS zone, zone.description AS zone_description, zone.price AS zone_price, zone.interval_recommended AS interval_recommended');
$query->join('LEFT', '#__services_zones AS zone ON zone.id = a.zone');
$query->select('category.icon AS category');
$query->join('LEFT', '#__services_categories AS category ON category.id = a.category');
但在我加入的区域表中,有逗号分隔值“1,2”,在创建关联数组后,我将服务分组到它们的区域,单个服务仅进入单个区域,而不是当值在表中是 '1,2' 它应该在两个区域中......我有一种感觉这是因为 'zone.name AS zone'
,因为那样它只返回一个名称,如果我说 'zone AS zone'
它返回逗号分隔的数字...
这是我对数组进行排序的方式:
foreach( $this->items as $item ){
if( !isset( $zones[ $item->zone ] ) )
$zone_items[ $item->zone] = array();
$zone_items[ $item->zone ][] = $item;
$zones[$item->zone] = array(
'zone' => $item->zone,
'zone_interval' => $item->interval_recommended,
'zone_description' => $item->zone_description,
'zone_price' => $item->zone_price,
'items' => $zone_items[$item->zone]
);
}
我通过以下方式显示它:
<?php foreach( $zones as $zone): ?>
<div class="row-fluid zones-page">
<div class="row-fluid zone-title-block">
<div class="span4 zone-name"><h1><?php echo $zone['zone']; ?></h1></div>
<div class="span7 zone-description">
<?php echo $zone['zone_description']; ?>
<?php if($zone['zone_interval'] == 1): ?>
<span class="interval pull-right">Interval Recommended</span>
<?php endif; ?>
</div>
</div>
<?php foreach( $zone['items'] as $items ) :?>
<div class="row-fluid zone-services-contain">
<div class="span1"><div class="zone-icon"><?php //echo $items->category; ?></div></div>
<div class="span11 zone-services">
<h4><?php echo $items->name; ?></h4>
<div><?php echo $items->description; ?></div>
</div>
</div>
<?php endforeach; ?>
<div class="row-fluid zone-amount">
only <div><?php echo 'R' . $zone['zone_price']; ?></div>
</div>
</div>
<div class="bicycle-divider">
<div class="bicycle-icon"></div>
</div>
<?php endforeach; ?>
非常感谢任何帮助。
Services
表如下所示:
和区域
表:
最佳答案
这就是为什么人们通常使用链接表来处理这样的多对多关系。一个服务可以有多个区域,一个区域可以有多个服务。查询逗号分隔字段并将其用于与另一个表的联接非常困难。
您有两种选择,一种涉及以正确的方式进行操作,另一种允许您保留当前的数据库模型。我强烈建议您以正确的方式进行操作,但为了回答您的问题,我将首先讨论其他选项。
只需将您的查询分开即可。只需在主查询中获取逗号分隔字段,然后运行第二个查询以获取区域名称:
SELECT * FROM zone WHERE id IN ($zoneIdsYouSelected)
现在,如果您正在处理一个列表,这可能不是很高效,因为这意味着您必须对列表运行一个查询,对每一行运行另一个查询。另一种方法是将所有区域放入一个数组中,然后使用基于 $zoneIdsYouSelected
的 PHP 从中进行选择。这样一来,如果您计划实现一个查询,您就可以使用 2 个查询,而不是每行数据一个查询。
正确的方法是制作一个仅包含两个字段的链接表:zone_id
和 service_id
。如果您随后进行这样的查询,您将在结果集中的一个“字段”中获得所有名称:
SELECT s.id, s.name, s.description, s.price, s.category, s.ordering,
s.state, s.checked_out, s.checked_out_time, s.created_by,
GROUP_CONCAT(DISTINCT z.name ORDER BY z.name ASC SEPARATOR ', ') AS zones
FROM service s JOIN service_zone sz ON s.id = sz.service_id
JOIN zone z ON z.id = sz.zone_id
GROUP BY s.id, s.name, s.description, s.price, s.category, s.ordering,
s.state, s.checked_out, s.checked_out_time, s.created_by
ORDER BY s.id
您可能需要稍微调整一下该查询,但我希望它是清楚的。请记住,并非所有数据库都支持 GROUP_CONCAT,但 MySQL 支持。
同样,这两种解决方案都可以正常工作并且性能良好,但是使用逗号分隔的字段会产生更多问题,就像这个问题一样。我强烈建议你改变你的数据库结构。如果您不熟悉链接表的概念,请阅读有关数据库规范化的内容。
关于php - MySQL 逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18310341/
我正在尝试从下拉列表中创建一个多选复选框,并通过 ; 连接所选结果。 我的代码是这样的: var myobject = { ValueA : 'Text A', ValueB : 'T
我有输入,我需要获取值并用 “|” 符号分隔。 我的输入: 输出我需要的: 00:00|00:00|00:00 我的代码是: (而且它不工作) var timesArray = $('table').
我正在尝试将超过 400 万行的列拆分为 4 个新列,问题是我不知道在哪里查看或我应该使用 Google 搜索哪个术语。 (是的,我已经在 Google 和 Stack 中搜索了一个类似的问题,但只在
我有一个很大的 csv 文件,其中充满了用“|”分隔的数字字符,例如: 432452 | 543634 4122442 | 41256512 64523 | 12416 然后我读入数据如下: fs
我有一个程序可以计算多个数字的阶乘。这些数字在 cmd 中作为参数传递: factorial.exe 3 4 5 这将分别计算 3、4 和 5 的阶乘。该程序的早期版本有一个百分比显示堆栈的完整性。我
这个问题已经有答案了: 奥 git _a (6 个回答) 已关闭 9 年前。 我有一个双数“547.123456” 我只想使用这个 double 作为“547.1”,就像“.”后面只有 1 个数字 我
我有一个程序可以计算多个数字的阶乘。这些数字在 cmd 中作为参数传递: factorial.exe 3 4 5 这将分别计算 3、4 和 5 的阶乘。该程序的早期版本有一个百分比显示堆栈的完整性。我
我有一个 ArrayList,其中包含一个 messageId、一个 -、一个用户名。 示例:E123-sam 我想划分 List 的每个元素,使得 - 之前的部分进入一个 ArrayList ,而之
我目前有一个“日期”列作为 pandas 数据框的索引,其格式为: January February .... Year2 January February ... Year3 (它来自 pdf 表格
我正在尝试对我的 .mdb 数据库进行 ODBC 查询。我正在使用 mdbtools 驱动程序。该代码是使用 Eclipse 用 C 语言编写的。唯一的问题是,当我写例如: "SELECT 'last
我需要知道如何将这两个if else 部分分开。 public static int NextBday(int Bdays, int days){ int daysleft = 0;
我想计算我的员工分开但合并在一起的出勤率 My target output 我的代码 SELECT count(employees_id) as numbers FROM attendance WH
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
下面是我的代码的一小段摘录,它从 API 添加了一行。总共有很多行。 每一行包含一行数据如 TY8tr,50,34,P,SB, 数据行在数据类型上是一致的。我如何通过 ,'s 拆分数组列表中
我想获取选中的元素并用逗号分隔它们,最后一个元素用“and”分隔 它的显示输出为: 我想删除最后一个元素后面的逗号 (,) 并在它前面添加 'and',例如 Sugar, Milk and Extra
我是 JSON 的新手,但在从已解析的 JSON 对象中提取数据时遇到问题: 我有一个 getstats.php 文件,它回显 mysql 查询的 json 编码结果。以下是 php 文件返回的示例:
我有一个像这样的数字/字符串(我不确定如何将 int 与字符串相互转换) 000000122310200000223340000700012220000011411000000011011271043
标签内的文本
我想尝试一些基本的网络抓取,但遇到了一个问题,因为我习惯了简单的 td-tags,在这种情况下,我有一个网页,其中包含以下预标记和其中的所有文本,这意味着刮掉它有点棘手。 11111111 1111
出于练习目的,我正在开发 TCP 客户端/服务器系统,我想在两者之间发送特定数据。 我已经能够发送字节并让它们显示为字符串。此外,我还可以发送一个特定的字符串(“mb”)并在服务器端弹出一个 Mess
在大量的 unicode 字符中,有一些实际上表示多个字符,例如两个 'f' 字符的 U+FB00 连字 ff。有什么方法可以轻松地将这样的字符转换为多个单个字符?最好是标准 Java API 中可用
我是一名优秀的程序员,十分优秀!