簡體   English   中英

在mysql中正確組織數據

[英]Organize data properly in mysql

因此,據我所知,mysql中沒有集合,列表,字典或數組。 我想構建一個具有兩個核心組件的系統,一個關於比賽的信息,然后是比賽中扮演的角色的列表。 如果在mysql中有列表,那么我會做這樣的事情:

game_id INT,
characters list<varchar>,
....more data

我希望能夠執行的基本查詢如下所示:

SELECT * FROM games WHERE characters IN LIST(list);

我可以只選擇一個字符,也可以指定10個字符。 問題是與在OR使用10個WHERE子句相比,如何在mysql中有效地做到這一點。 字符也沒有特定的順序...但是我想我可以根據它們的ID對其進行排序。

我認為要做到這一點的唯一方法是創建包含基本信息的第一個表,以及僅包含角色ID和game_id的第二個表。

任何人都有關於如何用一些我可能不知道的花哨的mysql技巧很好地組織這些數據的建議? 查詢也必須很快,因為最終可能會有很多查詢。 除非我添加視圖/下載計數器,否則它將比寫入更多。...比我估計它將比讀取更多寫入/更新。

謝謝,我很樂意提供更多信息。

如果我正確理解了您的問題,我可以想到兩種方法。

方法1 ...添加一個看起來像...的game_characters

CREATE TABLE `games_characters` (
  `game_id` int(11) DEFAULT NULL,
  `character_id` int(11) DEFAULT NULL,
  KEY `games` (`game_id`),
  KEY `characters` (`character_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

...那么查詢將類似於...

SELECT *
FROM `games` as g
LEFT JOIN `games_characters` as gc
  ON (g.`id` = gc.`game_id`)
WHERE gc.`character_id` IN (12,52,86,23)

方法2 ...使用LIKE,不太適合大型數據庫,但避免使用多余的表... characters記錄將包含來自另一個表的一堆id,即characters ,以句點分隔,例如“ .23.51.252.75.93 ”。 查詢看起來像

SELECT *
FROM `games`
WHERE `characters` LIKE '%.23.%'
   OR `characters` LIKE '%.58.%'

您的CMS必須解析並重建字符串。

暫無
暫無

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

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