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)
值分割数据,并显示请帮助我解决此问题。
答案 0 :(得分:1)
第一个WHERE子句的这一部分:
(i.disponibilidad > '0' OR i.disponibilidad >= '-1')
表示查询将返回i.disponibilidad = -1或高于此值的所有行。 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
请确保此方法有效