我有一张桌子,上面放着文件标签。标签可以是不同的类型。有许多文件,每个文件都存储有不同类型的标签。
列:文件,标签类型,标签
因此,假设一个文件有两行:
cyclist.jpg | date | 04-05-2012
cyclist.jpg | face | true
我想将文件的所有标签选择为一行,这样我就得到了mysql结果:
cyclist.jpg 2012年4月5日真实
目前,我对上述两项进行了查询,每种标记类型均进行了一次查询。我想知道是否可以仅基于一个共享列(文件)对相同表,相同列(标签)进行某种连接。
最佳答案
如果要自动连接两行,则意味着您可以只创建一行而不拆分它:
file | date | face
cyclist.jpg | 04-05-2012 | true
否则,如果需要保留单独的行,只需在一个查询中选择所有行:
$res = mysql_query("select * from tags where file='cyclist.jpg'");
然后迭代它们以完成“合并”记录:
$res = mysql_query("select * from tags_table where file='cyclist.jpg'");
$mergedRow = array();
while ($row = mysql_fetch_assoc($res)) {
foreach ($row as $rowKey => $rowValue) {
if (!array_key_exists($rowKey, $mergedRow)) {
$mergedRow[$rowKey] = $rowValue;
}
}
}
编辑:
如所承诺的,这里是一个通过单个查询将两行合并为一个示例,但是我仍然建议在PHP中使用
$mergedRow
方法将它们合并:)CREATE TABLE `files_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`tag_type` enum('PARENT','CHILD') NOT NULL DEFAULT 'PARENT',
`date` date DEFAULT NULL,
`file` varchar(255) NOT NULL DEFAULT '',
`face` smallint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
然后,您可以将PARENT-CHILDREN集与“配对”:
SELECT t1.file, t1.date, t2.face
FROM files_table AS t1 JOIN files_table AS t2 ON (t1.file = t2.file)
WHERE t1.tag_type = 'PARENT' AND t2.tag_type = 'CHILD'
GROUP BY file
关于php - mysql通过共享列条目连接两行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10454044/