私は、概念証明の冒険に取り組んでおり、何をしようとしているのはHTMLをループし、すべてのリンクを見つけてC#を使用してリンクを保存しています。リンクの部分が完全に動作していることを確認しますが、リンクをテーブルに保存すると、それらは徐々に複製されます。 1:1 1:2 1:2 1:3 1:3 1:3 1:4 1:4 1:4 1:4表にC#ループ重複レコードが挿入されました
レコード以下の例 等...
ページテーブル:
| 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);
}
}
}
}
はコード:私のコンソール出力IMに
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とすべてのクエリは良いようだ。おそらく何か愚かな私は見落としているが、私は間違って何を見つけることができないようだ。だから、どんな助けも素晴らしいだろう。ので、ここで
SELECT p.page_id, @link
FROM sites.links l
RIGHT JOIN sites.pages p ON p.page_url = @url";
は意味がありませんすべてのものです:
に参加する必要はありませんが、私は知りませんあなたの実際のテーブル構造..またはあなたは選択することができますDistinct – MethodMan
私は幸運と内部結合を試みました。私はテーブル構造で質問を更新しました – jgetner