Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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/0/search/2.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
如何在MySQL表上执行数据发生搜索_Mysql_Search_Lookup - Fatal编程技术网

如何在MySQL表上执行数据发生搜索

如何在MySQL表上执行数据发生搜索,mysql,search,lookup,Mysql,Search,Lookup,我是MySQL和PHP的新手。 我有两张这样的桌子,有上千行 Table "Company A" id | Date | Prize_1 | Prize_2 | Prize_3 | Prize_Consolation 1 | 2011-01-13 | "car" | "ipad2" | "bag" | "mouse" 2 | 2011-02-13 | "ps3" | "iphone4" | "mouse" | "bag" Table "Com

我是MySQL和PHP的新手。 我有两张这样的桌子,有上千行

Table "Company A" 
id | Date       | Prize_1   | Prize_2   | Prize_3 | Prize_Consolation
1  | 2011-01-13 | "car"     | "ipad2"   | "bag"   | "mouse" 
2  | 2011-02-13 | "ps3"     | "iphone4" | "mouse" | "bag"

Table "Company B" 
id | Date       | Prize_1   | Prize_2   | Prize_3 | Prize_Consolation 
1  | 2011-01-18 | "tv"      | "iphone4" | "ipod"  | "bag" 
2  | 2011-02-13 | "iphone4" | "ipad"    | "bag"   | "mouse"
用户将随机发送查询以搜索“奖品”的历史信息,该奖品是在何时以及由哪家公司颁发的

示例:我想在两个表上对奖品“iphone4”进行查询搜索,结果如下:

Company   | Date       | Prize
Company A | 2011-02-13 | Prize_2
Company B | 2011-01-18 | Prize_2
Company B | 2011-02-13 | Prize_1

Total 3 prizes for "iphone4"

什么样的MySQL查询可以实现这种查找搜索?

这些实际上不应该是两个单独的表,而是一个带有公司标识列的表

但是,您的情况可以通过一种黑客方式解决:

SELECT
  'Company A' AS Company,
  Date, 
  CASE 
    WHEN Prize_1 = 'iphone4' THEN 'Prize_1'    
    WHEN Prize_2 = 'iphone4' THEN 'Prize_2'
    WHEN Prize_3 = 'iphone4' THEN 'Prize_3'
    WHEN Prize_Consolation = 'iphone4' THEN 'Prize_Consolation'
    ELSE NULL
  END AS Prize
FROM `Company A`
WHERE 
  Prize_1 = 'iphone4'
  OR Prize_2 = 'iphone4'
  OR Prize_3 = 'iphone4'
  OR Prize_Consolation = 'iphone4'
/* UNION performs the same query against both tables and combine the results */
UNION
SELECT 
  'Company B' AS Company,
  Date, 
  CASE 
    WHEN Prize_1 = 'iphone4' THEN 'Prize_1'    
    WHEN Prize_2 = 'iphone4' THEN 'Prize_2'
    WHEN Prize_3 = 'iphone4' THEN 'Prize_3'
    WHEN Prize_Consolation = 'iphone4' THEN 'Prize_Consolation'
    ELSE NULL
  END AS Prize
来自
公司B
在哪里 Prize_1='iphone4' 或奖品2='iphone4' 或奖品3='iphone4' 或奖品+安慰='iphone4'

此设计更合适的表格布局如下所示:

Table Prizes
---------------
id INT AUTO_INCREMENT,
Date DATETIME,
Company VARCHAR(256),
Prize_Type INT,
Prize_Item VARCHAR(256)

Table Prize_Types
---------------
Prize_Type INT AUTO_INCREMENT PRIMARY KEY,
Prize_Description VARCHAR(32)
奖品 奖品类型 查询如下:
事实上,您可能还希望公司和奖品项目与奖品类型一样规范化到自己的表中。

如果可以,请返回并更改您的数据结构-这将不断给您带来问题。感谢@Michael的帮助。我想问一下,如果我还需要搜索哪个“奖品”是最常见的项目并按顺序列出它们,那么这仍然是最好的数据结构吗<代码>exmaple:Prize | Total | Last Occess date | iphone4 | 100 | 2012-01-30 | ipad2 | 70 | 2012-01-02 | tv | 10 | 2012-01-12 |@Dennis Yes,然后你可以做类似于
选择Prize |项目,MAX(date)作为最近的,计数(*)作为来自奖品的总数加入奖品上的奖品类型。奖品类型=奖品类型。奖品类型按奖品分组\u项目顺序按总数描述
1 | 2012-01-28 08:00:00 | 'Company A' | 3 | 'some prize'
2 | 2012-01-28 08:00:00 | 'Company A' | 2 | 'ipad'
3 | 2012-01-28 08:00:00 | 'Company A' | 1 | 'junky phone'
4 | 2012-01-28 08:00:00 | 'Company b' | 4 | 'iphone4'
1 | 'Prize 1'
2 | 'Prize 2'
3 | 'Prize 3'
4 | 'Consolation Prize'
SELECT
  Company,
  Date,
  Prize_Item,
  Prize_Description
FROM Prizes JOIN Prize_Types ON Prize_Types.Prize_Type = Prizes.Prize_Type
WHERE Prize_Item = 'iphone4'