Php 忽略其他列数据,检查不同的值

Php 忽略其他列数据,检查不同的值,php,sql,distinct,Php,Sql,Distinct,如果我有一个包含如下数据的表: Col1 | Col2 | Col3 111 | a | 222 | b | 1 111 | | 我希望只从临时表中选择不同的Col1,然后插入到另一个表中。但是在上面的表中,第二个“111”也将被选择,因为它有不同的Col2数据 或者,如果我仅选择Distinct Col1,其他列数据将被忽略 那么有没有办法解决这个问题呢?我只希望选择相同Col1数据的第一个插入行 我正在使用此查询:

如果我有一个包含如下数据的表:

   Col1 |  Col2 | Col3

   111  |  a     | 

   222  |  b     |  1

   111  |        |
我希望只从临时表中选择不同的Col1,然后插入到另一个表中。但是在上面的表中,第二个“111”也将被选择,因为它有不同的Col2数据

或者,如果我仅选择Distinct Col1,其他列数据将被忽略

那么有没有办法解决这个问题呢?我只希望选择相同Col1数据的第一个插入行

我正在使用此查询:

mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT DISTINCT Col1,Col2,Col3 FROM TempTable"); 
谢谢你的回复

PS:我不确定如何根据我的问题指定标题……也许有人可以帮助我。

也许类似这样(这可能是您想要的):

或者如果需要最小值。像这样:

INSERT INTO Tableb
(
    Col1,Col2,Col3
)
SELECT
    t.Col1,
    MIN(t.Col2) AS Col2,
    MIN(t.Col3) AS Col3
FROM
    TempTable as t
GROUP BY
    t.Col1

这样做了吗?

首先需要确定col1的每个不同值的最后一个ID,然后选择包含此ID的行:

INSERT DELAYED INTO Tableb (Col1,Col2,Col3) 
SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3
from TempTable
inner join
(
   select Col1, max(ID) ID
     from TempTable
    group by Col1
) c
ON TempTable.ID = c.ID
内部查询返回要插入的ID,所以只需将它们连接到原始表以过滤表


如果您想要第一个插入的可诱惑记录,请将max(id)替换为min(id)。

如何确定哪个“111”是最新的?@Vikram感谢您的回复。应该使用最旧的id,即第一个插入的数据。谢谢您的回答,我正在尝试。我能知道“t”是什么意思吗?例如t.Col1,t.Col2..它显示了“未知列t.xxx”。对此表示抱歉。更新了答案谢谢你的更新。我试过了,但似乎我遇到了一个小问题,还不确定是什么问题,但会再次调查,非常感谢你的帮助,你的回答给了我一个很好的概念。没问题。很乐意帮忙。如果你对答案很好,你可以考虑接受它吗?谢谢你的回答,它的工作非常完美,谢谢你的帮助。
mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1, MAX(t.Col2) AS Col2, MAX(t.Col3) AS Col3 FROM TempTable GROUP BY Col1");
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) 
SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3
from TempTable
inner join
(
   select Col1, max(ID) ID
     from TempTable
    group by Col1
) c
ON TempTable.ID = c.ID