Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql选择distinct而忽略一列_Php_Mysql - Fatal编程技术网

Php mysql选择distinct而忽略一列

Php mysql选择distinct而忽略一列,php,mysql,Php,Mysql,我有以下问题:我有一个表import\u data 这张桌子是这样的 | id | profile_id | sku | vendor | price | importRun | | 1 | 39 | 123 | myVen | 2.0 | 1 | | 2 | 39 | 456 | myVen | 2.0 | 1 | | 3 | 39

我有以下问题:我有一个表
import\u data

这张桌子是这样的

|  id  |  profile_id  |  sku  |  vendor  | price |  importRun  |
|  1   |     39       |  123  |  myVen   |  2.0  |      1      |
|  2   |     39       |  456  |  myVen   |  2.0  |      1      |
|  3   |     39       |  123  |  myVen   |  3.0  |      2      | 
我需要得到的是所有元素的输出,但只能一次。每个sku必须是唯一的。更糟糕的是,我需要最新的数据,如果它们是多余的

我的输出应该是这样的:

|  id  |  profile_id  |  sku  |  vendor  | price |  importRun  |
|  2   |     39       |  456  |  myVen   |  2.0  |      1      |
|  3   |     39       |  123  |  myVen   |  3.0  |      2      | 
关于结构的简短总结

ID=PK
sku=物品的唯一标识符
importRun=需要进行比较

因此,为了解释它:我有一个导入脚本,它读取给定的CSV文件并导入其中列出的所有文章。我定期收到这个CSV文件(每周一次)。我需要收集并保存所有数据,以便稍后创建价格演变

每次导入后,我都会增加导入的数量,这样就不会丢失任何信息(请记住,我不能使用
REPLACE-INTO
INSERT-IGNORE

现在,当我导出它时,如果一个SKU多次出现,我需要最新的数据。在这种情况下,SKU
123
在两次不同的运行中插入了2次。这意味着,由于我的最新运行有数字2,我需要这个元组(忽略第一个元组)

当我使用
disect
时,它仍然会输出相同的表,因为它们根本不不同,因为importRun不同

我应该能够使用
分组依据
,但我无法确定将采用哪个值,第一个值还是最后一个值?(导入1或2)

更新1

随着@mitkosoft的出现,我尝试了以下方法:

SELECT DISTINCT t1.*
FROM import_data t1
INNER JOIN import_profiles imp on t1.profile_id = imp.id
INNER JOIN (
    SELECT DISTINCT sku, MAX(importRun) AS importRun
    FROM import_data
    GROUP BY sku ) t2
ON t1.sku = t2.sku
WHERE imp.creditornr = 73329
AND t1.vendor = 'rackmountit'
AND t1.importRun = t2.importRun
**更新2** 我为所有相关的表添加了完整的结构

导入数据: |

导入配置文件
但是我仍然得到了重复项:/

也许您可以加入同一个表,其中sku=sku

您需要做的就是为每个
sku
确定
MAX(importRun)

SELECT
    t1.*
FROM
    import_data t1
    INNER JOIN (
        SELECT sku, MAX(importRun) AS importRun FROM import_data GROUP BY sku
    ) t2 
    ON t1.sku = t2.sku 
    AND t1.importRun = t2.importRun
输出为:

+----+------------+-----+--------+-------+-----------+
| id | profile_id | sku | vendor | price | importRun |
+----+------------+-----+--------+-------+-----------+
|  2 |         39 | 456 | myVen  | 2.0   |         1 |
|  3 |         39 | 123 | myVen  | 3.0   |         2 |
+----+------------+-----+--------+-------+-----------+
2 rows in set

嗯……由于某些原因,这没有起到作用,尽管它看起来是正确的。请查看我当前查询的更新问题。我的SQL是基于您的输入的,现在我在您的查询中看到了其他表,因此最好提供所有相关表的真实数据。很抱歉,给您带来不便,我添加了表。谢谢您的帮助如何确定当importRun相同时,导入数据表中最新的一行是哪一行?据我所知,
sku
是非常唯一的?换句话说,导入数据中的哪一行必须用于
profile\u id=26
,因为importRun处处都是1?在这种情况下,每一行都应该被取,因为sku不同。如果
sku
是相同的,那么我就可以使用有一个映射(我想它已经起作用了)。但是,可能有一些条目具有完全相同的数据(除了id)-这些是唯一的,我需要唯一的。这可以理解吗?