标签匹配(2)

最后得到的结果是最优的   但是读取结果的排序存在问题   因为select语句无法按排好的qid排序。除非新建一个用作排序的量。

明天做最后改动。

 public int RelatedTest(int[] qid, int j, int temp)
        {
            for (int k = 0; k < j; k++)
            {
                if (qid[k] == temp)
                    return k;
            }
            return -1;
        }
        public List<Question> GetRelatedQuestions(List<Tag> tag)
        {
            List<Question> list = new List<Question>();
            SqlConnection conn = DbHelper.getConnection();
            int[] qid = new int[tag.Count * 10];
            int[] resemble = new int[tag.Count * 10];
            int j = 0, k = 0, l = 0;
            int temp1, temp2;
            string b="";
            for(int i=0;i<tag.Count;i++)
            {
                if (i != tag.Count - 1)
                    b += "'" + tag[i].Id + "',";
                else
                    b += "'" + tag[i].Id + "'";
            }
                SqlDataReader reader = DbHelper.ExecuteReader(
                String.Format("SELECT QuestionTagAssociation.* FROM [Question],[QuestionTagAssociation] WHERE Question.qid=QuestionTagAssociation.qid and tid in("+b+")"
                ,conn)
               );
                while (reader.Read())
                {
                    int temp = Convert.ToInt32(reader["qid"].ToString());
                    if (j == 0)
                    {
                        qid[j++] = temp;
                        resemble[0] = 1;
                    }
                    else
                    {
                        int a = RelatedTest(qid, j, temp);
                        if (a < 0)
                        {
                            resemble[j] = 1;
                            qid[j++] = temp;
                        }
                        else
                        {
                            resemble[a]++;
                        }
                    }
                }
            if (j > 10)
                l = 10;
            else
                l = j;
            for (int i = 0; i < l; i++)   //进行l次选择排序
            {
                int index = i;
                for (k= index + 1; k <j ; k++)
                {
                    if (resemble[k] > resemble[index])
                        index = k;
                }
                temp2 = resemble[index];
                resemble[index] = resemble[i];
                resemble[i] = temp2;
                temp1 = qid[index];
                qid[index] = qid[i];
                qid[i] = temp1;

            }
            b = "";
            for (int i = 0; i < l; i++)
            {
                if (i != l - 1)
                    b += "'" + qid[i]+ "',";
                else
                    b += "'" + qid[i]+ "'";
            }
            SqlDataReader reader2 = DbHelper.ExecuteReader(
            String.Format("SELECT  Question.* FROM [Question] WHERE Question.qid in(" + b+ ") order by "+qid+"")
            , conn
           );
            fillQuestionList(list, reader2);
            return list;
        }
      

 

posted @ 2012-11-12 01:33  MagicCode1023  阅读(216)  评论(0编辑  收藏  举报