如何根据条件从数据库中分离数据?

时间:2014-05-20 09:31:18

标签: c# mysql asp.net

 public static DataSet getAvailableApartmentsPricesData(string userid, string password, string cityId, string date_from, string date_to, string no_of_people)
    { 
        bool res = validation(userid, password);
        string errormsg = string.Empty;
        DataSet ds7 = new DataSet();
        DataSet dsavailablity = new DataSet();
        if (res)
        {
            string partnerid = Getpartneridbyuid(userid, password);

            MySqlConnection con = new MySqlConnection(connectionstring);
            string withPriceQuery = "select distinct i.id_edificio ,ce.id_capacidad_edificio, i.precio , SUM(i.precio) as base_price, i.disponibilidad, ce.tipo, c.max_capacidad, c.descripcion_capacidad, e.poblacion_edificio, e.provincia_edificio, e.pais_edificio FROM inventario i, capacidad_edificio ce, capacidad c, edificios e WHERE 1=1 and (i.disponibilidad > '0' OR i.disponibilidad >= '-1') and i.fecha between '" + date_from + "' and Date_Sub('" + date_to + "',interval 1 Day) and i.id_capacidad_edificio = ce.id_capacidad_edificio and ce.id_capacidad = c.id_capacidad and c.max_capacidad >= '" + no_of_people + "' and i.id_edificio = e.id_edificio and e.poblacion_edificio = '" + cityId + "' and e.status = 'STATUS_ACTIVE' and e.xml = 'si' group by i.id_edificio, i.id_capacidad_edificio order by i.precio ASC";
            MySqlCommand cmd7 = new MySqlCommand(withPriceQuery, con);
            MySqlDataAdapter da7 = new MySqlDataAdapter(cmd7);
            da7.Fill(ds7);
            DataTable dt = ds7.Tables[0];

            //
            MySqlConnection con1 = new MySqlConnection(connectionstring);
            string withPriceQueryByAppforavialibity = "select distinct i.id_edificio ,ce.id_capacidad_edificio, i.precio , SUM(i.precio) as base_price, i.disponibilidad, ce.tipo, c.max_capacidad, c.descripcion_capacidad, e.poblacion_edificio, e.provincia_edificio, e.pais_edificio FROM inventario i, capacidad_edificio ce, capacidad c, edificios e WHERE 1=1 and ( i.disponibilidad = '-1') and i.fecha between '" + date_from + "' and Date_Sub('" + date_to + "',interval 1 Day) and i.id_capacidad_edificio = ce.id_capacidad_edificio and ce.id_capacidad = c.id_capacidad and c.max_capacidad >= '" + no_of_people + "' and i.id_edificio = e.id_edificio and e.poblacion_edificio = '" + cityId + "' and e.status = 'STATUS_ACTIVE' and e.xml = 'si' group by i.id_edificio, i.id_capacidad_edificio order by i.precio ASC";
            MySqlCommand cmdforavialibity = new MySqlCommand(withPriceQueryByAppforavialibity, con1);
            MySqlDataAdapter daforavialibity = new MySqlDataAdapter(cmdforavialibity);
            daforavialibity.Fill(dsavailablity);
            DataTable dtvailablity = dsavailablity.Tables[0];

            if (ds7.Tables[0].Rows.Count > 0)
            {


                System.Data.DataColumn newColumn = new System.Data.DataColumn("descripcion_promocion");
                dt.Columns.Add(newColumn);

                System.Data.DataColumn newColumn1 = new System.Data.DataColumn("valor_promocion");
                dt.Columns.Add(newColumn1);

                System.Data.DataColumn newColumn2 = new System.Data.DataColumn("BestPrice");
                dt.Columns.Add(newColumn2);

                System.Data.DataColumn newColumn4 = new System.Data.DataColumn("id_promocion");
                dt.Columns.Add(newColumn4);

                System.Data.DataColumn newColumn3 = new System.Data.DataColumn("BookingType");
                dt.Columns.Add(newColumn3);

                System.Data.DataColumn newcolcondition = new System.Data.DataColumn("Condition");
                dt.Columns.Add(newcolcondition);

                System.Data.DataColumn newcolconditionmsg = new System.Data.DataColumn("ConditionMessage");
                dt.Columns.Add(newcolconditionmsg);

                for (int i = 0; i < ds7.Tables[0].Rows.Count; i++)
                {
                    DataSet dscondition = GetConditionList(ds7.Tables[0].Rows[i]["id_edificio"].ToString(), ds7.Tables[0].Rows[i]["tipo"].ToString(), date_from, date_to);
                    if (dscondition.Tables[0].Rows.Count > 0)
                    {
                       // valor_condicion, c.valor_last_condicion
                        errormsg = Errormsg(dscondition.Tables[0].Rows[0]["tipo_condicion"].ToString(), date_to, date_from, dscondition.Tables[0].Rows[0]["valor_condicion"].ToString(), dscondition.Tables[0].Rows[0]["valor_last_condicion"].ToString(), dscondition.Tables[0].Rows[0]["parent_condition_id"].ToString());
                        dt.Rows[i]["Condition"] = "TRUE";
                        dt.Rows[i]["ConditionMessage"] = errormsg;

                    }
                    else
                    {
                        dt.Rows[i]["Condition"] = "FALSE";
                        dt.Rows[i]["ConditionMessage"] = "No conditions Applicable";
                    }
                    //DataSet dsprice = price(ds7.Tables[0].Rows[i]["id_edificio"].ToString(), date_from, date_to, no_of_people, ds7.Tables[0].Rows[i]["tipo"].ToString());
                    string type = ds7.Tables[0].Rows[i]["tipo"].ToString();
                    DataSet dsprice = GetPromotionIds(ds7.Tables[0].Rows[i]["id_edificio"].ToString(), date_from, date_to, type);
                    if (dsprice.Tables[0].Rows.Count == 0)
                    {
                        dt.Rows[i]["descripcion_promocion"] = 0.0;
                        dt.Rows[i]["valor_promocion"] = 0.0;
                        dt.Rows[i]["BestPrice"] = ds7.Tables[0].Rows[i]["base_price"];
                        dt.Rows[i]["id_promocion"] = "Null";
                        if (dsavailablity.Tables[0].Rows.Count > 0)
                        {
                            if (ds7.Tables[0].Rows.Count == dsavailablity.Tables[0].Rows.Count)
                            {
                                if (Convert.ToInt16(dsavailablity.Tables[0].Rows[i]["disponibilidad"]) == -1)
                                {
                                    dt.Rows[i]["BookingType"] = "On Request";
                                }
                                else
                                {
                                    dt.Rows[i]["BookingType"] = "Online";
                                }
                            }
                        }
                        else
                        {
                            if (Convert.ToInt16(ds7.Tables[0].Rows[i]["disponibilidad"]) == -1)
                            {
                                dt.Rows[i]["BookingType"] = "On Request";
                            }
                            else
                            {
                                dt.Rows[i]["BookingType"] = "Online";
                            }
                        }

                    }
                    else
                    {

                        string description_promotion = string.Empty;
                        double best_price = 0.0;
                        for (int pro = 0; pro < dsprice.Tables[0].Rows.Count; pro++)
                        {


                            double unitprice = (Convert.ToDouble(ds7.Tables[0].Rows[i]["precio"]));
                            double base_price = Convert.ToDouble(ds7.Tables[0].Rows[i]["base_price"]);
                            double valor_promotion = Convert.ToDouble(dsprice.Tables[0].Rows[pro]["valor_promocion"]);
                            switch (dsprice.Tables[0].Rows[pro]["tipo_promocion"].ToString())
                            {
                                case "porcentaje":

                                    if (best_price != 0.0)
                                    {
                                        description_promotion = description_promotion +" + "+ dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        double val = ((best_price * valor_promotion) / 100);
                                        best_price = best_price - val;
                                    }
                                    else
                                    {
                                        description_promotion = description_promotion + dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        double val1 = ((base_price * valor_promotion) / 100) - best_price;
                                        best_price = base_price - val1;
                                    }

                                    break;
                                case "descuento_dias":

                                    if (best_price != 0.0)
                                    {
                                        description_promotion = description_promotion +" + "+ dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        double val2 = best_price - (base_price - (unitprice * valor_promotion));
                                        best_price = val2;
                                    }
                                    else
                                    {
                                        description_promotion = description_promotion + dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        best_price = (base_price - (unitprice * valor_promotion)) - best_price;
                                    }
                                    break;
                                case "fixed":

                                    if (best_price != 0.0)
                                    {
                                        description_promotion = description_promotion +" + "+ dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        double val3 = best_price - (base_price - valor_promotion);
                                        best_price = val3;
                                    }
                                    else
                                    {
                                        description_promotion = description_promotion + dsprice.Tables[0].Rows[pro]["descripcion_promocion"].ToString();
                                        best_price = (base_price - valor_promotion) - best_price;
                                    }
                                    break;

                            }
                        }

                        //   dt.Rows[i]["descripcion_promocion"] = Convert.ToString(dsprice.Tables[0].Rows[0]["descripcion_promocion"]);
                        dt.Rows[i]["descripcion_promocion"] = description_promotion;
                        dt.Rows[i]["valor_promocion"] = Convert.ToString(dsprice.Tables[0].Rows[0]["valor_promocion"]);
                        dt.Rows[i]["BestPrice"] = string.Format("{0:f2}", best_price);
                        dt.Rows[i]["id_promocion"] = Convert.ToString(dsprice.Tables[0].Rows[0]["id_promocion"]);
                        if (dsavailablity.Tables[0].Rows.Count > 0)
                        {
                            if (ds7.Tables[0].Rows.Count == dsavailablity.Tables[0].Rows.Count)
                            {
                                if (Convert.ToInt16(dsavailablity.Tables[0].Rows[i]["disponibilidad"]) == -1)
                                {
                                    dt.Rows[i]["BookingType"] = "On Request";
                                }
                                else
                                {
                                    dt.Rows[i]["BookingType"] = "Online";
                                }
                            }
                        }
                        else
                        {
                            if (Convert.ToInt16(ds7.Tables[0].Rows[i]["disponibilidad"]) == -1)
                            {
                                dt.Rows[i]["BookingType"] = "On Request";
                            }
                            else
                            {
                                dt.Rows[i]["BookingType"] = "Online";
                            }
                        }

                    }
               }
                ds7.AcceptChanges();
                return ds7;
            }
            else
            {
                return noDataFound();
            }
        }
        else 
        {
            return invalidLogin();
        }
    }

数据库数据

id_edificio |id_capacidad |precio      |base_price|disponibilidad|tipo   |max_cap     |desc_cap  |pob_edi|pro_edi|pais_edi
1553    |   54  | 64.85 | 349.55     |   5         |  A     |4  |2/4    |8141      |19        |ES
1552    |   56  | 69.8  | 408.8  |   5         |   A    |4  |2/4    |8141      |19        |ES
2202    |   1834    | 89.9  | 538.7  |   3         |   A    |6  |4/6    |8141      |19        |ES
1551    |   60  | 99.4  | 695.8  |   3         |   A    |4  |2/4    |8141      |19        |ES
1986    |   1095    | 115.55    | 617.15     |  -1         |   A    |8  |6/8    |8141      |19        |ES
1986    |   1096    | 119.85    | 655.65     |  -1         |   B    |8  |8  |8141      |19        |ES

我的getAvailableApartmentsPricesData()函数中有这些数据,我需要显示数据,disponibilidad此列包含许多值,-1表示onRequest,其余值表示{{ 1}},但是在我的Online函数中,只有在线处理它才能正确分割。我在getAvailableApartmentsPricesData()函数getAvailableApartmentsPricesData() 1.ds7中有两个设置查询。 2.daforavialibity包含以上数据,1.ds7仅包含2.daforavialibity数据,使用查询需要根据onRequested(-1)值分割数据,并显示请帮助我解决此问题。

1 个答案:

答案 0 :(得分:1)

第一个WHERE子句的这一部分: (i.disponibilidad > '0' OR i.disponibilidad >= '-1') 表示查询将返回i.disponibilidad = -1或高于此值的所有行。 }不需要条件。{/ p>

此外,您正在使用mathemtic符号进行测试,例如'='和'&gt;'但是您将数字包装在引号中,以便将它们视为字符串。例如-1是数字'-1'是一个字符串。

第二个WHERE子句的这一部分: i.disponibilidad > '0' 也做同样的事情

所以... daforavialibity在其查询中应包含( i.disponibilidad = '-1'),并且如果您希望da7显示所有记录,则da7应该没有任何内容。

我尽可能多地帮助你,但你的英语很难理解,我并不完全理解这个问题,但是我认为这就是你想要达到的目标。

评论后的修改

在评论部分与您聊天时,您的列( i.disponibilidad = -1)似乎是一个整数字段,因此您的查询需要更改。请更改此行: i.disponibilidad

对此:

string withPriceQueryByAppforavialibity = "select distinct i.id_edificio ,ce.id_capacidad_edificio, i.precio , SUM(i.precio) as base_price, i.disponibilidad, ce.tipo, c.max_capacidad, c.descripcion_capacidad, e.poblacion_edificio, e.provincia_edificio, e.pais_edificio FROM inventario i, capacidad_edificio ce, capacidad c, edificios e WHERE 1=1 and ( i.disponibilidad = '-1') and i.fecha between '" + date_from + "' and Date_Sub('" + date_to + "',interval 1 Day) and i.id_capacidad_edificio = ce.id_capacidad_edificio and ce.id_capacidad = c.id_capacidad and c.max_capacidad >= '" + no_of_people + "' and i.id_edificio = e.id_edificio and e.poblacion_edificio = '" + cityId + "' and e.status = 'STATUS_ACTIVE' and e.xml = 'si' group by i.id_edificio, i.id_capacidad_edificio order by i.precio ASC";

无论你在哪里看到这一行:

string withPriceQueryByAppforavialibity = "select distinct i.id_edificio ,ce.id_capacidad_edificio, i.precio , SUM(i.precio) as base_price, i.disponibilidad, ce.tipo, c.max_capacidad, c.descripcion_capacidad, e.poblacion_edificio, e.provincia_edificio, e.pais_edificio FROM inventario i, capacidad_edificio ce, capacidad c, edificios e WHERE 1=1 and ( i.disponibilidad = -1 ) and i.fecha between '" + date_from + "' and Date_Sub('" + date_to + "',interval 1 Day) and i.id_capacidad_edificio = ce.id_capacidad_edificio and ce.id_capacidad = c.id_capacidad and c.max_capacidad >= '" + no_of_people + "' and i.id_edificio = e.id_edificio and e.poblacion_edificio = '" + cityId + "' and e.status = 'STATUS_ACTIVE' and e.xml = 'si' group by i.id_edificio, i.id_capacidad_edificio order by i.precio ASC";

将其更改为此。

Convert.ToInt16(ds7.Tables[0].Rows[i]["disponibilidad"]) == -1

请确保此方法有效