【发布时间】:2019-02-27 10:08:32
【问题描述】:
我有 2 张桌子:
$sql = "CREATE TABLE $media_table (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`description` varchar(2000) DEFAULT NULL,
`playlist_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `playlist_id` (`playlist_id`),
) $charset_collate;";
$sql = "CREATE TABLE $taxonomy_table (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(10) NOT NULL,
`title` varchar(500) NOT NULL,
`media_id` int(11) NOT NULL,
`playlist_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`),
CONSTRAINT `mvp_taxonomy_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES {$media_table} (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) $charset_collate;";
假设我想从 media_table 中选择所有行,其中 playlist_id=5 并从 taxonomy_table="sport, football" 中选择标题。
我可以运行 2 个查询,首先从 taxonomy_table where title="..." AND playlist_id="5" 获取所有 media_id,然后第二个查询从 media_table WHERE id IN (ids) 中选择所有行。
这可能属于某种 JOIN 查询吗?
我试过了,但没有得到想要的结果:
$query = "SELECT * FROM {$media_table}
INNER JOIN {$taxonomy_table}
ON {$media_table}.id = {$taxonomy_table}.media_id
WHERE {$taxonomy_table}.type='tag' AND {$taxonomy_table}.title IN ($arg) AND {$taxonomy_table}.playlist_id=%d
ORDER BY {$media_table}.order_id";
似乎它将两个表中的所有列混合到结果中,但我只想从 media_table 中检索具有分类表中标题的行。
【问题讨论】:
-
如果是我,我会暂时忘记 PHP,转而查看 meta.stackoverflow.com/questions/333952/…