插入c#循环重复记录

时间:2016-09-19 20:04:19

标签: c# mysql sql

所以我正在进行概念证明冒险,我想尝试做的是循环浏览html并找到所有链接并使用C#保存mysql中的链接。找到链接部分工作正常,但当我去保存表中的链接时,它们将逐步复制。以下示例

表中的记录: 1:1 1:2 1:2 1:3 1:3 1:3 1:4 1:4 1:4 1:4 等...

页面表:

    | page_id | page_url        | date_added |
    ------------------------------------------
    | 1       | "http://bla.com |            |

链接表:

    | link_id | link_page_id | date_added |
    ---------------------------------------

获取链接的代码:

    private static void getLinks(string contents, string url)
    {
        HtmlDocument html = new HtmlDocument();
        html.LoadHtml(contents);

        HtmlNodeCollection links = html.DocumentNode.SelectNodes("//a[@href]");

        foreach(HtmlNode link in links)
        {
           foreach(HtmlAttribute attr in link.Attributes)
            {
                if(attr.Name == "href")
                {
                    saveLinks(url, attr.Value);
                }
            }
        }

    }

保存链接的代码:

    private static void saveLinks(string url, string link)
    {
        try
        {
            Console.WriteLine(url + " - " + link);
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = @"INSERT INTO 
                                    sites.links(
                                        links_page_id, 
                                        link
                                    )
                                SELECT
                                    p.page_id,
                                    @link
                                FROM 
                                    sites.links l
                                RIGHT JOIN 
                                    sites.pages p
                                ON p.page_url = @url";
            cmd.Prepare();

            cmd.Parameters.AddWithValue("@url", url);
            cmd.Parameters.AddWithValue("@link", link);
            cmd.ExecuteNonQuery();
        }

        catch (MySqlException e)
        {
            Console.WriteLine("Failure: " + e.Message);
        }
    }

在我的控制台输出中我获得了没有重复项的预期链接数,我已经在mysql中测试了查询,一切看起来都不错。它可能是一些愚蠢的东西,我可以忽略,但我似乎无法找到我做错了什么。所以任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

如果您需要通过其网址获取page_id,则无需加入sites.links

          cmd.CommandText = @"INSERT INTO 
                                sites.links(
                                    links_page_id, 
                                    link
                                )
                            SELECT
                                p.page_id,
                                @link
                            FROM 
                                sites.pages p
                            WHERE p.page_url = @url";

答案 1 :(得分:0)

你的格式很奇怪......这就是我以前所说的:

 SELECT p.page_id, @link
 FROM sites.links l
 RIGHT JOIN sites.pages p ON p.page_url = @url";

所以这里所有的事情都没有意义。您从(sites.links)中选择的表格不会在查询中的任何位置使用,这也意味着它不会在RIGHT JOIN中使用,这意味着这不是右连接而是交叉连接。

你究竟想做什么,我很失落。

也许如果你展示了你得到的输入以及你期望的输出可能会有所帮助。