【问题标题】:how to search from array?如何从数组中搜索?
【发布时间】:2019-07-19 06:18:47
【问题描述】:

我正在PHP 建立一个电子商务网站,并且我有一个产品表,其中存储了 3 个不同的价格:

  1. 批发价
  2. 售价
  3. 正常价格

现在我没有为 3 个价格创建 3 个列,而是将这些价格存储在一个数组中,并将该数组存储在 SQL 数据库中。

现在的问题是我只想根据批发价格选择产品。比方说,

"select * from table where wholesale price = 100".

我该怎么做?

我还没有尝试过任何代码,因为我很困惑,不知道该怎么做。

【问题讨论】:

  • 您为什么决定将它们存储为数组?有特殊需要吗?
  • 男人有这么多与单一产品相关的事情。所以我认为为每种产品规格在数据库中制作不同的列将是冗长且有问题的。这就是我使用 array@Sami Kuhmonen 的原因
  • 看看如何正确设计数据库。如果您想要交易价格或其他类型怎么办。理想情况下,您应该有一个价格类型,因此您可以例如说“从价格类型 = 2 且价格 = 100 的表中选择 *”。 (看看第三范式)
  • 你想说什么?清楚@Nigel Ren。什么是第三范式
  • 请看DB normalization

标签: php mysql arrays


【解决方案1】:

SQL 没有数组的概念——你可以有一个逗号分隔的字符串,但由于它只是一个字符串,你不能以任何方式引用单个元素。 MYSQL 确实具有一些字符串处理能力,因此您可以很容易地拆分一个 3 元素字符串,例如

drop table if exists t;
create table t(prod int,p varchar(100));
insert into t values
(1,'10,20,30'),
(2,'40,50'),
(3,'60'),
(4,'70,80,90,100');



select prod,
         substring_index(p,',',1)  WholesalePrice,
         substring_index(substring_index(p,',',2),',',-1)  SalePrice,
         substring_index(p,',',-1) RegularPrice
from t;

+------+----------------+-----------+--------------+
| prod | WholesalePrice | SalePrice | RegularPrice |
+------+----------------+-----------+--------------+
|    1 | 10             | 20        | 30           |
|    2 | 40             | 50        | 50           |
|    3 | 60             | 60        | 60           |
|    4 | 70             | 80        | 100          |
+------+----------------+-----------+--------------+
4 rows in set (0.00 sec)

请注意除了 3 个字符串元素之外的任何东西的有用(原文如此)效果。任何查看数据的人都不知道字符串元素属于什么。 “每个产品规格都会冗长且有问题” - 从长远来看,存储 csv 值比标准化数据更成问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多