动态 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 子句),然后验证食谱仅 使用这些成分(通过比较 COUNTs)。

为了避免 SQL 注入问题(并简化 IN 查询的编写),我建议通过 ORM 使用参数化查询。 PetaPoco 提供很好的 IN 支持。