动态 Sql 或 sql 算法
dynamic Sql or sql algorithm
我有 3 张桌子。故事是:我会选择材料。
还有这些食材可以做哪些饭菜呢
这是我的 C# 代码。
string sql = "SELECT * FROM tblmealmaterials WHERE ";
string[] idler = textBox1.Text.Split(',');
for (int i = 0; i < idler.Length; i++)
{
for (int s = 0; s < i; s++)
{
sql +="( materialId= "+ idler[s] + " and materialId= " + idler[i] + " )" ;
if (s<i)
sql += " or ";
}
}
sql += " (";
for (int i = 0; i < idler.Length; i++)
{
sql += " materialId="+ idler[i] ;
if (i<idler.Length-1)
sql += " and ";
}
sql += " )";
richTextBox1.Text = sql;
我的桌子:
my sql 生成器代码 c#
SELECT b.MealID FROM
(
SELECT mealid, COUNT(*) as IngredientCount FROM tblmealmaterials WHERE materialid in (1,2,3)
GROUP BY mealid
)
a
INNER JOIN tblmealmaterials b
ON a.mealID = b.mealID
GROUP BY b.MealID
HAVING COUNT(*) = MAX(a.IngredientCount)
以上查询将查找使用 任何 成分的餐点(使用 IN
子句),然后验证食谱仅 使用这些成分(通过比较 COUNT
s)。
为了避免 SQL 注入问题(并简化 IN
查询的编写),我建议通过 ORM 使用参数化查询。 PetaPoco 提供很好的 IN
支持。
我有 3 张桌子。故事是:我会选择材料。 还有这些食材可以做哪些饭菜呢
这是我的 C# 代码。
string sql = "SELECT * FROM tblmealmaterials WHERE ";
string[] idler = textBox1.Text.Split(',');
for (int i = 0; i < idler.Length; i++)
{
for (int s = 0; s < i; s++)
{
sql +="( materialId= "+ idler[s] + " and materialId= " + idler[i] + " )" ;
if (s<i)
sql += " or ";
}
}
sql += " (";
for (int i = 0; i < idler.Length; i++)
{
sql += " materialId="+ idler[i] ;
if (i<idler.Length-1)
sql += " and ";
}
sql += " )";
richTextBox1.Text = sql;
我的桌子:
my sql 生成器代码 c#
SELECT b.MealID FROM
(
SELECT mealid, COUNT(*) as IngredientCount FROM tblmealmaterials WHERE materialid in (1,2,3)
GROUP BY mealid
)
a
INNER JOIN tblmealmaterials b
ON a.mealID = b.mealID
GROUP BY b.MealID
HAVING COUNT(*) = MAX(a.IngredientCount)
以上查询将查找使用 任何 成分的餐点(使用 IN
子句),然后验证食谱仅 使用这些成分(通过比较 COUNT
s)。
为了避免 SQL 注入问题(并简化 IN
查询的编写),我建议通过 ORM 使用参数化查询。 PetaPoco 提供很好的 IN
支持。