Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 如何设计查询以从数据库中正确选择_Php_Sql - Fatal编程技术网

Php 如何设计查询以从数据库中正确选择

Php 如何设计查询以从数据库中正确选择,php,sql,Php,Sql,我尝试选择的方式: SELECT*FROM products\u translate WHERE(第(10)项中的类别)和….. 数据库中字段的内容: 类别-7、10 此结构化查询仅显示仅按类别10分类的产品,而不显示包含其他类别的产品。 例如7、10 如何正确构造查询 数据库结构: TABLE `products_translate` ( `id` int(11) NOT NULL, `uniqueID` int(11) NOT NULL, `title` varchar(255)

我尝试选择的方式:
SELECT*FROM products\u translate WHERE(第(10)项中的类别)和…..

数据库中字段的内容: 类别-7、10

此结构化查询仅显示仅按类别10分类的产品,而不显示包含其他类别的产品。 例如7、10

如何正确构造查询

数据库结构:

TABLE `products_translate` (
  `id` int(11) NOT NULL,
  `uniqueID` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL
)
因此,类别字段可以包含:
(1,3,7,10)

数据库中的一条记录
(109109,“标题”,“7,10”)


我的目的是选择7,10个数据库请求,以输出它们在category 7或10字段中包含的所有条目。

如果您的数据库是mysql,则可以使用
FIND_in_SET()

 SELECT * FROM products_translate WHERE FIND_IN_SET('7, 10',category)> 0

要查询等于7或10的类别,只需在查询中添加7即可

SELECT * FROM products_translate WHERE category IN (10, 7)

如果执行
选择*FROM products\u translate WHERE(10中的类别)和..
操作,则只返回
类别=10的行

因此,您可以:

  • 从产品中选择*\u翻译其中(类别<10)和…
    :如果需要类别1、2、3。。。十,
  • 从产品中选择*\u翻译其中(在(7,10)中的类别)和…
    :如果您只想要类别7和10
  • SELECT*FROM products\u translate其中。。。按类别分组
    :返回所有元素(根据您所在的条件),但按类别分组
(每个元素一个)
  • SELECT*FROM products\u translate其中。。。按类别订购
    :通过这种方式,您将按类别订购退货元素
  • 这就是你要找的吗

    编辑:添加有关表结构的一些信息后

    SELECT*FROM products\u translate WHERE(类别如“%10%”)和…
    :这将选择类别字段中出现“10”的行。但请注意,它也将与
    105
    810
    等类别一起使用


    您的category字段是一个坏主意:使用VARCHAR将多个category放在一个字段中不是很有效……它应该是一个整数,因此对于category为7和10的元素,您的表中应该有2个元素,而不是一个。为此,请在uniqueID+categoryID上添加唯一索引以避免重复。

    之所以会出现这种情况,是因为您选择了所有等于10的类别。为什么不在in中添加7,如
    select*FROM products\u translate WHERE(category in(10,7))和
    在category字段中准确记录数据的方式?似乎是文本字段,数字由逗号分隔。您编写此查询吗?如果是这样,您是否有任何理由在查询中将
    类别放在(10)
    中?如果7中包含10,我发送10,查询中包含7,那么逻辑是什么?嗨,米卡·莱格尝试在类别字段中选择所有包含10的条目如果您想要包含10的条目,那么您想要
    …其中类别=10
    ?我们不知道你的表格是什么样子,里面是什么,所以很难知道类别是唯一的还是条目可以有多个类别条目可以在字段中有多个类别,我选择7,10你应该编辑你的问题以显示你的数据库结构,很难这样回答,因为
    其中category=10
    将通过返回包含category 10的元素来完成这项工作。也许您需要一个子查询,该子查询可能如下所示:
    其中id\u products=(从products\u translate中选择id\u product,其中category=10)
    ,但如果没有更多详细信息,则无法判断。我添加了更多信息。如果我遗漏了什么,就说补充一下。非常感谢。