标题听起来有点复杂,但很难解释没有示例的含义。基于其他行值查询SQL表中的数据
所以我有树表SQL数据库:
照片:
+------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| hash | varchar(256) | NO | MUL | NULL | |
| path | varchar(1024) | NO | MUL | NULL | |
| store_date | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+------------------+------+-----+-------------------+-----------------------------+
tags_names:
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(64) | NO | UNI | NULL | |
| type | int(11) | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
标签:
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| value | varchar(2048) | YES | | NULL | |
| name_id | int(10) unsigned | NO | MUL | NULL | |
| photo_id | int(10) unsigned | NO | MUL | NULL | |
+----------+------------------+------+-----+---------+----------------+
Photos
是制表与关于照片的数据(id,照片和sha哈希路径)。
Tag_names
收集有关可能的标签(ID,标签的名字和类型,我在我的程序映射到正确的类型像字符串,数字,日期等)的信息
Tags
包含有关该照片包含的信息与标签标记值: name_id
是对tag_names.id的引用,photo_id
是对photos.id的引用,value
是标记的值。
我遇到的问题是我想要以树形式显示数据库中的数据。 一个例子:一个根节点将有子节点,这些节点的名字将是一个日期。 tag_names表中会有一个“Date”标签,并且会在标签表中引用该名称(通过tags.name_id)和不同的值。
左右的可视化:
select * from tag_names;
+----+------+------+
| id | name | type |
+----+------+------+
| 1 | Date | 1 |
+----+------+------+
select * from tags;
+----+------------+---------+----------+
| id | value | name_id | photo_id |
+----+------------+---------+----------+
| 1 | 2011.05.19 | 1 | 1 |
| 3 | 2011.05.20 | 1 | 2 |
+----+------------+---------+----------+
会是这样的一棵树:
root
|
+--- 2011.05.19
|
+---- photo 1
|
2011.05.20
|
+---- photo 2
我可以与tags
适当的查询非常方便地实现它。 但是我希望能够在树中创建两个(或更多)级别。
可以说我希望在我的树上有日期和时间。 我仍然可以收集来自第一级的数据(找到名称为“Date”的标记的所有可能值),但是我希望找到“Time”标记的所有可能值,但仅适用于具有特定“Date”标记的照片。
所以我需要在tags
上做一个select
,其中标签名称等于“时间”,并且带有相关photo_id
的照片还包含具有一个特定值的标签“日期”。
是否可以使用我的表格布局? 我总是可以缓存一些数据,这是我最后的手段,但是我很好奇,如果这样的问题可以直接用SQL解决。
编辑:下面
查询照片上一个例子(在评论中问道):
'1', 'cda6bfe0fd7a588704e1ebc81f8ef4b3c884895afadf0d0c97892db8f6d9cc91', '/DSCF9529.JPG', '2014-03-23 16:19:26'
'2', 'cda6bfe0fd7a588704e1ebc81f8ef4b3c884895afadf0d0c97892db8f6d9cc91', '/DSCF9529.JPG', '2014-03-23 16:19:26'
'3', 'e213df3f22276173c2e07a8c4ec9e83aee73605196d4e2aa529fbb34ceb6f86d', '/DSCF9532.JPG', '2014-03-23 16:19:26'
'4', '681a7c723ce16908c0fc73ed819de9a1af7c19cbd6fbcb7bf1c238a9d0378c2f', '/DSCF9531.JPG', '2014-03-23 16:19:26'
'5', 'd586eaae7d0fd625ec6282a51d12625db341c72d9395efd9e142850e457272ca', '/DSCF9537.JPG', '2014-03-23 16:19:26'
'6', 'dc1c40ce690c42f9fa9edc0f5020e01ca8e0c59694108d49f942b79b0167ef10', '/DSCF9222.JPG', '2014-03-23 16:19:26'
'7', '518884037e9d67ccbee98f6805cf7bb5ccf4c6f2e7aa35efe3c834e7c7ad3c32', '/DSCF9534.JPG', '2014-03-23 16:19:26'
'8', '21d33a2c5a25515689d68885d7d485aa89b96b7e5929a86ef658e53b61c7266b', '/DSCF9221.JPG', '2014-03-23 16:19:26'
'9', 'ff7ea451ce772b9d18c706dc9b989a1a318491e5d0f095575bf5dd6cc6448ab0', '/DSCF9530.JPG', '2014-03-23 16:19:26'
您可以添加用于获取第一级别的查询吗? - 基本上,你将不得不做一个选择的选择和加入一个选择的时间有你的日期标记 –
这里是我的选择: 选择photos.id,tag_names.name,tags.value从标记左加入(照片, tag_names)ON(photos.id = tags.photo_id AND tag_names.id = tags.name_id)WHERE name ='Date'; 你可以举例吗?那些是我使用SQL –
进行查询的第一步吗?喜欢它拉出你想要的? –