Php 值位于数组中的MySQL SELECT语句
我需要一些关于MySQL语句的帮助,因为我无法真正使其工作 我有一张这样的桌子:Php 值位于数组中的MySQL SELECT语句,php,mysql,arrays,select,Php,Mysql,Arrays,Select,我需要一些关于MySQL语句的帮助,因为我无法真正使其工作 我有一张这样的桌子: +---+-------------------------------+ |id | fruit | +---+-------------------------------+ | 1 | apple,orange,pear,grape,lemon | | 2 | pear,melon,apple,kiwi,lemon | | 3 | orange,kiwi,p
+---+-------------------------------+
|id | fruit |
+---+-------------------------------+
| 1 | apple,orange,pear,grape,lemon |
| 2 | pear,melon,apple,kiwi,lemon |
| 3 | orange,kiwi,pear,apple,cherry |
| 4 | grape,lemon,cherry,apple,melon|
+---+-------------------------------+
我需要做的是选择列fruit
中包含单词humber
的所有行。所讨论的单词可能位于数组中的任何位置
我厌倦了下面的查询,但出于某种原因,我只得到3-4行,肯定不是所有行:
$fruit = $_GET['fruit'];
$query1= "SELECT * FROM tbl_fruits WHERE ".$fruit." IN (fruit)";
如有任何意见,我们将不胜感激。您可以使用
FIND\u IN\u SET
SELECT * FROM tbl_fruits
WHERE find_in_set('$fruit', fruit)
但实际上你应该改变你的桌子设计。
切勿在一列中存储多个值
更好的桌子设计是
fruits table
------------
id name
1 melon
2 orange
3 apple
...
products table
-------------------
id name price
1 P1 1.50
2 P2 2.99
3 P3 0.99
product_fruits table
--------------------
product_id fruit_id
1 1
1 2
2 2
3 1
这是一个经典的多对多关系(m到n)。您可以使用
FIND\u IN\u SET
SELECT * FROM tbl_fruits
WHERE find_in_set('$fruit', fruit)
但实际上你应该改变你的桌子设计。
切勿在一列中存储多个值
更好的桌子设计是
fruits table
------------
id name
1 melon
2 orange
3 apple
...
products table
-------------------
id name price
1 P1 1.50
2 P2 2.99
3 P3 0.99
product_fruits table
--------------------
product_id fruit_id
1 1
1 2
2 2
3 1
这是一个经典的多对多关系(m到n)。试试下面的sql
$fruit = $_GET['fruit'];
$query1= "SELECT * FROM tbl_fruits WHERE fruit LIKE '%".$fruit."%'";
试试下面的sql
$fruit = $_GET['fruit'];
$query1= "SELECT * FROM tbl_fruits WHERE fruit LIKE '%".$fruit."%'";
使用类似于子句的
:
SELECT * FROM tbl_fruits
WHERE fruit LIKE '%apple%';
使用类似于
子句的:
SELECT * FROM tbl_fruits
WHERE fruit LIKE '%apple%';
如前所述,您可以/应该以不同的方式构建表结构。
它是“关系数据库”中的“关系数据库”。看
一如往常:不是银弹。还有其他类型的数据库,也有不规范(部分)表的RASON。但无论如何,这里有一个用法:
如前所述,您可以/应该以不同的方式构建表结构。
它是“关系数据库”中的“关系数据库”。看
一如往常:不是银弹。还有其他类型的数据库,也有不规范(部分)表的RASON。但无论如何,这里有一个用法:
关于您的编码风格:永远不要使用字符串连接进行查询。从tbl_Frients中选择*在_集合中查找(“$Frient”,Frient)在查询@meskobalazs中捕获它,获取点。麻烦你解释一下为什么不应该这样做。正如你所见,我仍在学习,因此任何能带来一些知识的评论都是值得赞赏的。关于你的编码风格:永远不要使用字符串连接进行查询。从tbl_fruits中选择*在_集中查找_(“$fruit”,fruit),在查询@meskobalazs中捕捉它,注意。麻烦你解释一下为什么不应该这样做。正如你所看到的,我仍在学习,所以任何能带来一些知识的评论都是非常感谢的。在表设计中,我决定这样做,因为我有4列,每个列包含5个值。所以我必须在20个不同的列中进行选择,每个值对应一个列,或者只有4个列和一个包含5个值的数组。出于简单的原因,第二个选项似乎是一个更好的选择。我将我的答案扩展到一个更好的表格设计。请给我一点时间原始表格的名称和用途是什么?该表格包含产品列表-大约17000行。所以每个产品都有一个标签。然后,我将显示共享同一标签的产品列表。因此,标签为苹果的产品将与苹果一起出现在列表中,以此类推。以同样的方式,我还有3个列,每个列有5个标签,在整个网站的其他相关页面上显示产品。这很好,谢谢juergen。在表设计中,我决定这样做,因为我有4列,每个列包含5个值。所以我必须在20个不同的列中进行选择,每个值对应一个列,或者只有4个列和一个包含5个值的数组。出于简单的原因,第二个选项似乎是一个更好的选择。我将我的答案扩展到一个更好的表格设计。请给我一点时间原始表格的名称和用途是什么?该表格包含产品列表-大约17000行。所以每个产品都有一个标签。然后,我将显示共享同一标签的产品列表。因此,标签为苹果的产品将与苹果一起出现在列表中,以此类推。以同样的方式,我还有3列,每个列有5个标签,在整个网站的其他相关页面上显示产品。@Robert我认为现在它的sql注入是免费的。编辑后它是免费的,但当我发布评论时它不是。现在代码不会编译。顺便说一句,语法错误。@Robert我想现在它的sql注入是免费的。编辑后它是免费的,但当我发布评论时它不是。现在代码不会编译。语法错误。这也会捕获“西瓜”。现在,如果OP能够用逗号开始和结束所有字符串,使它们看起来像、苹果、橘子、梨、葡萄、柠檬、
,那么他可以使用像“%、瓜、%”
这样的字符串来捕捉“西瓜”。现在,如果OP能够用逗号开始和结束所有字符串,使它们看起来像、苹果、橘子、梨、葡萄、柠檬、
,那么他可以使用像“%、瓜、%”这样的字符串