gpt4 book ai didi

mysql - 通过多个标签选择照片

转载 作者:可可西里 更新时间:2023-11-01 06:48:06 25 4
gpt4 key购买 nike

我有三个 MySQL 表——照片、标签和标签照片——以及照片和标签之间的 m:n 关系。

Photos:     id | filename | ...
Tags: id | name
Tagsphotos: photo | tag

我想选择所有符合这种条件的照片:

(tagged as "dirty" AND tagged as "road") AND (tagged as "light.front" OR tagged as "light.side") AND (tagged as "perspective.two-point")

...这意味着我想找到所有带有脏路、两点透视以及侧光或前光的图片。

我该怎么做?谢谢。

最佳答案

我认为您将不得不将标签表连接到照片表四次……非常难看。

SELECT Photos.*
FROM
Photos
JOIN (
Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
) t1 ON (t1.photo = Photos.id)
JOIN (
Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
) t2 ON (t2.photo = Photos.id)
JOIN (
Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
) t3 ON (t3.photo = Photos.id)
JOIN (
Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
) t4 ON (t4.photo = Photos.id)
WHERE
(t1.name = 'dirty' AND t2.name = 'road')
AND (t3.name = 'light.front' OR t3.name = 'light.side')
AND (t4.name = 'perspective.two-point')

子查询可能会更快:

SELECT *
FROM Photos
WHERE
Photos.id IN (
SELECT Tagspohotos.photo
FROM Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
WHERE Tags.name = 'dirty'
)
AND Photos.id IN (
SELECT Tagspohotos.photo
FROM Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
WHERE Tags.name = 'road'
)
AND Photos.id IN (
SELECT Tagspohotos.photo
FROM Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
WHERE Tags.name = 'light.front' OR Tags.name = 'light.side'
)
AND Photos.id IN (
SELECT Tagspohotos.photo
FROM Tagsphotos JOIN Tags ON (Tags.id = Tagsphotos.tag)
WHERE Tags.name = 'perspective.two-point'
)

关于mysql - 通过多个标签选择照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com