簡體   English   中英

如何在MySQL表上進行數據事件搜索

[英]How to do a data occurance search on a MySQL tables

我是MySQL和PHP的新手。 我有2個這樣的表,其中有數千行。

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

來自Company B獎品_1 ='iphone4'或獎品_2 ='iphone4'或Prize_3 ='iphone4'或Prize_Consolation ='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)

獎品

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'

實際上,您可能還希望將公司和獎品以及獎品類型歸一化到自己的表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM