我有这张桌子:
我想删除相同的行。例如前五行是相同的,我的表应该只有一行包含这些数据: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);
}
我的第一个问题中的查询行不正确。
答案 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'替换为日期列。