- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 mysql 查询中连接表,它给我重复的结果,因为其中一个表有 2 个结果。
这是我的查询。
$query_order = "
SELECT sfo.entity_id, sfo.status, sfo.created_at, sfo.customer_firstname, sfo.customer_lastname, sfo.customer_email, sfo.subtotal, sfo.shipping_amount, sfo.tax_amount, sfo.grand_total, sfo.total_paid, sfo.total_due, sfo.total_item_count,
sfoa.address_type, sfoa.firstname, sfoa.lastname, sfoa.street, sfoa.city, sfoa.region, sfoa.postcode, sfoa.telephone, sfoa.country_id,
sfoi.product_id, sfoi.name, sfoi.sku, sfoi.qty_ordered, sfoi.price, sfoi.original_price, sfoi.row_total, sfoi.additional_data as additional_data1,
sfst.track_number, sfst.carrier_code, sfst.title,
sfop.additional_data as additional_data2, sfop.amount_paid, sfop.amount_ordered
FROM sales_flat_order sfo
JOIN sales_flat_order_address sfoa
ON sfo.entity_id = sfoa.parent_id
JOIN sales_flat_order_item sfoi
ON sfo.entity_id = sfoi.order_id
JOIN sales_flat_shipment_track sfst
ON sfo.entity_id = sfst.order_id
JOIN sales_flat_order_payment sfop
ON sfo.entity_id = sfop.entity_id
WHERE sfo.increment_id = '" . $po . "'
LIMIT 0 , 30";
sales_flat_order_address
的 parent_id
有 2 个结果,因为其中一个是账单地址,另一个是送货地址。这两个字段都具有相同的 parent_id
值,这就是我要加入表格的原因。
所有表都与来自 sales_flat_order sfo
的相同值连接,该值是 entity_id
并且是该表的主键。
我如何才能确保其他表只从它们的字段中输出一次值,同时确保我仍然从 sales_flat_order_address
表中获得账单地址和送货地址?
我尝试了 GROUP BY,它确实消除了重复项,但它也从 sales_flat_order_address
表中消除了送货地址。
我应该用子查询来构造查询吗?我已经进行了大量搜索,但到目前为止我不确定如何处理我的特殊情况。
2016 年 5 月 7 日更新
为了显示账单地址和送货地址,并且不复制其他连接表中的其他字段,我必须做的是我只是将地址表连接两次,这样 while 循环只循环一次而不是两次。
所以我将其添加到我的SELECT
sfoab.address_type as billing, sfoab.firstname as bfirst, sfoab.lastname as blast, sfoab.street as bstreet, sfoab.city as bcity, sfoab.region as bregion, sfoab.postcode as bzip, sfoab.telephone as btel, sfoab.country_id as bcountry,
sfoas.address_type as shipping, sfoas.firstname as sfirst, sfoas.lastname as slast, sfoas.street as sstreet, sfoas.city as scity, sfoas.region as sregion, sfoas.postcode as szip, sfoas.telephone as stel, sfoas.country_id as scountry,
然后我加入了两次地址表
LEFT JOIN sales_flat_order_address sfoab
ON sfo.entity_id = sfoab.parent_id AND sfoab.address_type = 'billing'
LEFT JOIN sales_flat_order_address sfoas
ON sfo.entity_id = sfoas.parent_id AND sfoas.address_type = 'shipping'
然后最后在 while 循环中我的变量
$billing = ucfirst($row['billing']);
$billing_firstname = $row['bfirst'];
$billing_lastname = $row['blast'];
$billing_name = ucwords($billing_firstname . " " . $billing_lastname);
$billing_street = ucwords($row['bstreet']);
$billing_city = ucwords($row['bcity']);
$billing_region = $row['bregion'];
$billing_postcode = $row['bzip'];
$billing_telephone = $row['btel'];
$billing_country = $countries[$row['bcountry']];
$shipping = ucfirst($row['shipping']);
$shipping_firstname = $row['sfirst'];
$shipping_lastname = $row['slast'];
$shipping_name = ucwords($shipping_firstname . " " . $shipping_lastname);
$shipping_street = ucwords($row['sstreet']);
$shipping_city = ucwords($row['scity']);
$shipping_region = $row['sregion'];
$shipping_postcode = $row['szip'];
$shipping_telephone = $row['stel'];
$shipping_country = $countries[$row['scountry']];
其他人的建议是使用 GROUP BY 或 DISTINCT。当我使用这些方法时,它不会同时显示账单地址和送货地址。它只会显示帐单而不是送货地址。
当我关闭这些方法时,账单和运费都会显示,但它会导致其他表中的其他字段输出两次。
所以我找到的唯一解决方案是两次加入地址表。这样做我得到了我想要的。而且 while 循环不会循环两次来获取两种地址类型。
如果您知道更好或更有效的方法来完成此任务,请告诉我。我是 MySQL 查询和 while 循环的新手。
最佳答案
您可以尝试按唯一列分组:像这样吗?
<?php
//THE ONLY ADDITION HERE IS THE "GROUP BY" CLAUSE
//OTHERWISE THIS IS YOUR OWN CODE WITH THE EXCEPTION OF FORMATTING...
$query_order = "
SELECT
sfo.entity_id,
sfo.status,
sfo.created_at,
sfo.customer_firstname,
sfo.customer_lastname,
sfo.customer_email,
sfo.subtotal,
sfo.shipping_amount,
sfo.tax_amount,
sfo.grand_total,
sfo.total_paid,
sfo.total_due,
sfo.total_item_count,
sfoa.address_type,
sfoa.firstname,
sfoa.lastname,
sfoa.street,
sfoa.city,
sfoa.region,
sfoa.postcode,
sfoa.telephone,
sfoa.country_id,
sfoi.product_id,
sfoi.name,
sfoi.sku,
sfoi.qty_ordered,
sfoi.price,
sfoi.original_price,
sfoi.row_total,
sfoi.additional_data as additional_data1,
sfst.track_number,
sfst.carrier_code,
sfst.title,
sfop.additional_data as additional_data2,
sfop.amount_paid,
sfop.amount_ordered
FROM sales_flat_order_address sfoa,
sales_flat_order sfo
JOIN sales_flat_order_item sfoi
ON sfo.entity_id = sfoi.order_id
JOIN sales_flat_order_item sfoi
ON sfo.entity_id = sfoi.order_id
JOIN sales_flat_shipment_track sfst
ON sfo.entity_id = sfst.order_id
LEFT JOIN sales_flat_order_payment sfop
ON sfo.entity_id = sfop.entity_id
WHERE sfo.increment_id = " . (int)$po . "
GROUP BY sfo.entity_id
LIMIT 0 , 30";
取决于你想要达到的目标; LEFT JOIN 可能会像这样派上用场:
$query_order = "
SELECT
sfo.entity_id,
sfo.status,
sfo.created_at,
sfo.customer_firstname,
sfo.customer_lastname,
sfo.customer_email,
sfo.subtotal,
sfo.shipping_amount,
sfo.tax_amount,
sfo.grand_total,
sfo.total_paid,
sfo.total_due,
sfo.total_item_count,
sfoa.address_type,
sfoa.firstname,
sfoa.lastname,
sfoa.street,
sfoa.city,
sfoa.region,
sfoa.postcode,
sfoa.telephone,
sfoa.country_id,
sfoi.product_id,
sfoi.name,
sfoi.sku,
sfoi.qty_ordered,
sfoi.price,
sfoi.original_price,
sfoi.row_total,
sfoi.additional_data as additional_data1,
sfst.track_number,
sfst.carrier_code,
sfst.title,
sfop.additional_data as additional_data2,
sfop.amount_paid,
sfop.amount_ordered
FROM sales_flat_order_address sfoa,
sales_flat_order sfo
LEFT JOIN sales_flat_order_item sfoi
ON sfo.entity_id = sfoi.order_id
LEFT JOIN sales_flat_shipment_track sfst
ON sfo.entity_id = sfst.order_id
LEFT JOIN sales_flat_order_payment sfop
ON sfo.entity_id = sfop.entity_id
WHERE sfo.increment_id = " . (int)$po . "
GROUP BY sfo.entity_id
LIMIT 0 , 30";
我希望这对您有所帮助...
关于php - MYSQL Join Query Multiple Tables 部分字段显示重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018628/
这个问题在这里已经有了答案: What is the best way to parse html in C#? [closed] (15 个答案) 关闭 3 年前。 string input =
为什么 wrapper #4 没有继承其父表容器的高度?表格嵌套在一个显示 block 包装器中,每个嵌套的div是显示表格,每个表格继承到最里面的一个。是什么原因造成的,我该如何解决? jsfidd
我正在使用带有 Bootstrap 的自定义 css 作为外边框。但顶部边框不可见,除非我将其大小设置为 2 px。 我该如何解决这个问题? HTML #name 1.one 2.two 3.thr
我正在逻辑层面上设计一个数据库,以便稍后将其传递给程序员来交付。我只是粗略地了解它们的工作原理,所以我很难简洁地表达我的问题。这是我的问题: 我有一个名为 MEANINGS 的表。 我有一个名为 WO
在 Laravel 上,我们可以使用 DB::table('table')->get(); 或使用 model::('table')->all() 进行访问;我的问题是它们之间有什么区别? 谢谢。 最
我试图从以下内容中抓取 URL从 WorldOMeter 获取 CoVid 数据,在此页面上存在一个表,id 为:main_table_countries_today其中包含我希望收集的 15x225
这是我的图表数据库:/image/CGAwh.png 我用 SEQUELIZE 制作了我的数据库模型: 型号:级别 module.exports = (sequelize, DataTypes) =>
我真的不明白为什么我的代码不能按预期工作。当我将鼠标悬停在表格的每一行上时,我想显示一个图像(来 self 之前加载的 JSON)。每个图像根据行的不同而不同,我想将它们显示在表格之外的另一个元素中。
假设我的数据库中有一张地铁 map ,其中每条线路的每个站点都是一行。如果我想知道我的线路在哪里互连: mysql> SELECT LineA.stop_id FROM LineA, LineB WH
我最近经常使用这些属性,尤其是 display: table-cell。它在现代浏览器中得到了很好的支持,并且它对某些网格有很多好处,并且可以非常轻松地对齐内容,而无需棘手的标记。但在过去的几天里,我
在 CSS 中,我可以这样做: http://s1.ipicture.ru/uploads/20120612/Uk1Z8iZ1.png http://s1.ipicture.ru/uploads/20
问题作为标题,我正在学习sparkSQL,但我无法很好地理解它们之间的区别。谢谢。 最佳答案 spark.table之间没有区别& spark.read.table功能。 内部 spark.read.
我正在尝试根据 this answer 删除表上的非空约束.但是,它似乎没有在 sqlite_sequence 中创建条目。这样做之后,即使我可以在使用测试表时让它正常工作。 有趣的是,如果我备份我的
var otable = new sap.m.Table();//here table is created //here multiple header I'm trying to create t
下面两种方法有什么区别: 内存 性能 答: select table.id from table B: select a.id from table a 谢谢(抱歉,如果我的问题重复)。 最佳答案 完
我尝试在表格后添加点,方法是使用 table::after 选择器创建一个点元素并使用 margin: 5px auto 5px auto; 将其居中。它有效,但似乎在第一个表格列之后添加了点,而不是
我正在设计一个可以标记任何内容的数据库,我可能希望能够选择带有特定标记的所有内容。 我正在为以下两个选项而苦苦挣扎,希望得到一些建议。如果有更好的方法请告诉我。 选项A 多个“多对多”连接表。 tag
"center" div 中的下表元素导致 "left" div 中的内容从顶部偏移几个像素(在我的浏览器中为 8 ).在表格之前添加一些文本可消除此偏移量。 为什么?如何在不要求在我的表格前添加“虚
我是一名优秀的程序员,十分优秀!