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

本文关键字:分离 数据 数据库 何根 条件 | 更新日期: 2023-09-27 18:04:23

 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,其余值表示Online,但在我的getAvailableApartmentsPricesData()函数中,所有的东西都只是在线的,它不能正确分离。我在getAvailableApartmentsPricesData()函数1.ds7 2.daforavialibity中有两个集合查询。1.ds7包含上述数据,2.daforavialibity只包含onRequested(-1)数据,使用两者的查询需要根据disponibilidad值分离数据并显示,请帮助我解决这个问题。

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

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

您还使用数学符号进行测试,例如'='和'>',但您将数字包装在引号中,以便将它们视为字符串。例如-1是一个数字,'-1'是一个字符串。

第二个WHERE子句的这一部分:( i.disponibilidad = '-1')也做同样的事情

所以…如果您希望da7显示所有记录,那么daforavailalivity应该在其查询中包含( i.disponibilidad = -1),而da7不应该在那里有任何内容。

我已经尽可能多地帮助你了,但是你的英语很难理解,我也不完全理解这个问题,但是从字里行间我想这就是你想要得到的。

注释后的修改

在评论部分与您聊天后,似乎您的列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

改成这个

ds7.Tables[0].Rows[i]["disponibilidad"] == -1

请确保这个工作