防止重复的行

时间:2011-12-21 12:39:35

标签: php select

我有这张桌子:

enter image description here

我想删除相同的行。例如前五行是相同的,我的表应该只有一行包含这些数据:40.792274 29.412994 2011-12-21 17:19:52。

所以我使用了以下代码:

$query = "SELECT * FROM table GROUP BY date";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)){

    $date = $row['date'];
    $lat = $row['latitude'];
    $lon = $row['longitude'];
    $query = "SELECT * FROM table WHERE date='$date' AND latitude='$lat' AND longitude='$lon'";
    $re = mysql_query($query);
    $number = mysql_num_rows($re);
    $number--;

    $query = "DELETE * FROM table WHERE date='$date' AND latitude='$lat' AND longitude='$lon' LIMIT $number";

    mysql_query($query);
}

但是这段代码不起作用..我该怎么办?

已修改

我解决了我的问题:

$query = "SELECT * FROM table GROUP BY date";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)){

    $date = $row['date'];
    $lat = $row['latitude'];
    $lon = $row['longitude'];
    $query = "SELECT * FROM table WHERE date='$date' AND latitude=$lat AND    longitude=$lon";
    $re = mysql_query($query);
    $number = mysql_num_rows($re);
    $number--;

    $query = "DELETE FROM table WHERE date='$date' AND latitude=$lat AND longitude=$lon LIMIT $number";

    mysql_query($query);
}

我的第一个问题中的查询行不正确。

4 个答案:

答案 0 :(得分:1)

尝试更改$dateOfNewData = date('Y-m-d H:i:s');

$dateOfNewData = date('Y-m-d 00:00:00'); //or change the first 00 to H if you need it to match by hour, second 00 to i if you need to match minutes and the same with seconds.

$dateOfNewData = date('Y-m-d')几乎相同,适用于日期时间字段类型

除非您需要确切的时间,否则您还需要将查询修改为类似的内容:

"SELECT * FROM mytable WHERE date = '$dateOfNewData'" // you might also want the end date if you're working with the past in your database.

答案 1 :(得分:1)

你使用的

date()将给出当前日期时间,所以尝试使用mktime()来获取你想要的日期时间。

你必须稍微改变你的查询,我在下面修改了查询,

$query = mysql_query("SELECT * FROM mytable WHERE date='$dateOfNewData'");

在mysql Date或datetime中,coulmn应该在''。

之内

答案 2 :(得分:1)

要删除重复的元素,您可以使用以下内容:

$q = "SELECT date FROM table GROUP BY date"
$r = mysql_query($r);
$date = '';
while($row = mysql_fetch_array($r)){
    $date = $row['date'];
    $q = "SELECT date FROM mytable WHERE date='$date'";
    $re = mysql_query($q);
    $num = mysql_num_rows($re);
    $num--;
    $q = "DROP FROM mytable WHERE date='$date' LIMIT $num";
    mysql_query($q);
}

应该做的伎俩。更具体地说,在创建$ date值时,必须为PHP提供使用时间。 date()默认使用当前时间,但您可以为其提供自定义时间作为第二个参数。

我建议您查看php.net上的strtotime()手册(将数据库中的时间转换为可与date()一起使用的时间戳)。

编辑:上面的答案已被编辑,以删除所有重复的条目。

答案 3 :(得分:1)

嗯,你可以尝试像“Ignas”建议,但你也可以试试这个:

首先得到没有小时,分钟和秒的日期(年,月,日)。如果您使用完整日期格式,则需要完全匹配相同的时间。 (对于第二个相同的)这不是你真正想要的东西我猜。所以你可以用这个:

$dateOfNewData = date('Y-m-d'); //just get year, month, day in right format (2011-12-20)

然后运行查询。在这里你有更多的选择,但我认为更容易就是这样:

"SELECT * FROM mytable WHERE date_col LIKE '$dateOfNewData%' GROUP BY date_col" 

这会将相同的日期组合在一起,只会显示一次,并且会匹配'date_col以示例开头的所有行:2011-12-20%(这就是为什么我使用LIKE和$ dateOfNewData%)

$ dateOfNewData包含以下格式的当前日期:year-month-day(2011-12-20)并且在Mysql查询中不要忘记在日期结束时使用%。例如,它就像在Windows中的*。

'mytable'用您的表名替换,'date_col'替换为日期列。