Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 值位于数组中的MySQL SELECT语句_Php_Mysql_Arrays_Select - Fatal编程技术网

Php 值位于数组中的MySQL SELECT语句

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

我需要一些关于MySQL语句的帮助,因为我无法真正使其工作

我有一张这样的桌子:

+---+-------------------------------+
|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能够用逗号开始和结束所有字符串,使它们看起来像
、苹果、橘子、梨、葡萄、柠檬、
,那么他可以使用
像“%、瓜、%”这样的字符串