如何根据条件从数据库中分离数据
本文关键字:分离 数据 数据库 何根 条件 | 更新日期: 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
请确保这个工作