0

这是一个简单的问题,但我不明白

我在数据库日期和新闻邮件中有两个表我在新闻邮件中有一些列 ID、名称、地址、电子邮件等我有 2 个字段 ID、邮件

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

我试过了 :

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

我从日期开始只收到一条记录,最后一行来自新闻邮件

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

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

http://sqlfiddle.com/#!2/fad06/1/0 在这里它正在工作,但不是在我的真实数据库上

问题在于将数据从 txt 文件插入新闻邮件

最初的 :

$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

谢谢你们 !!!

4

3 回答 3

0
SELECT  a.*
FROM    Date a
        INNER JOIN NewsMail b
            ON a.email LIKE CONCAT('%', b.mail, '%')
于 2013-04-04T12:21:04.643 回答
0

用这个:

SELECT d.*
FROM date d
INNER JOIN newsmail n
    ON n.mail = d.email;
于 2013-04-04T12:21:11.393 回答
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))
于 2013-04-04T12:27:05.183 回答