我只从mysql查询中获取最后一条记录

时间:2013-04-04 12:18:24

标签: php mysql

这是一件简单的事情,但我不明白

我在DB中有两个表 日期和新闻邮件 在日期我有一些列ID,姓名,地址,电子邮件等 在newsmail中我有2个字段ID,邮件

我需要从日期中提取所有记录,其中包含来自newsmail的电子邮件地址

我试过了:

SELECT * FROM date WHERE date.email IN (SELECT mail FROM newsmail);

我从newsmail的最后一行收到的日期只有一条记录 还

SELECT * FROM date d JOIN newsmail n ON d.email LIKE n.mail

与上述相同的结果...... 电子邮件和邮件字段为VARCHAR(50)

http://sqlfiddle.com/#!2/fad06/1/0 这里有效,但不是真正的数据库

问题在于从txt文件

向newsmail插入数据

INITIAL:

$tmpfisier = $_FILES["upfile"]["tmp_name"];
$file_handle = fopen($tmpfisier, "r");
    while(!feof($file_handle)){
        $email_line = fgets($file_handle);
        $values = mysql_query("INSERT INTO  newsmail (`ID` ,`mail`) VALUES ( NULL ,  '$email_line')");
    }
    fclose($file_handle);

已编辑:

$tmpfisier = $_FILES["upfile"]["tmp_name"];
$file_handle = fopen($tmpfisier, "r");
    while(!feof($file_handle)){
        $raw_email_line = fgets($file_handle);
        $email_line = preg_replace('/\s\v/u', '', $raw_email_line);
        $values = mysql_query("INSERT INTO  newsmail (`ID` ,`mail`) VALUES ( NULL ,  '$email_line')");
    }
    fclose($file_handle);

所以问题是来自txt / csv文件的WHITESPACES

谢谢你们!

3 个答案:

答案 0 :(得分:0)

SELECT  a.*
FROM    Date a
        INNER JOIN NewsMail b
            ON a.email LIKE CONCAT('%', b.mail, '%')

答案 1 :(得分:0)

使用此:

SELECT d.*
FROM date d
INNER JOIN newsmail n
    ON n.mail = d.email;

答案 2 :(得分:0)

可能需要TRIM函数来删除前导和尾随空格。

SELECT * FROM date d LEFT JOIN newsmail n ON TRIM(d.email) = TRIM(n.mail)

对于SQLSERVER,您可能需要同时使用LTRIM和RTRIM来获得相同的结果。

SELECT * FROM date d LEFT JOIN newsmail n ON RTRIM(LTRIM(d.email)) = RTRIM(LTRIM(n.mail))