Php 在mysql中,如何将一列中的属性值与另一列中的属性值进行比较?
我是mysql新手。 我读过stackoverflow和其他几篇文章。他们都建议使用LIKE,但我仍然无法得到正确的结果。我想知道问题是否是由包含信息的不同行引起的 假设我有一张像这样的talbePhp 在mysql中,如何将一列中的属性值与另一列中的属性值进行比较?,php,mysql,multiple-columns,Php,Mysql,Multiple Columns,我是mysql新手。 我读过stackoverflow和其他几篇文章。他们都建议使用LIKE,但我仍然无法得到正确的结果。我想知道问题是否是由包含信息的不同行引起的 假设我有一张像这样的talbeCD: artist album Prince Purple Rain Adam Prince Charming 我想选择艺人Prince,因为它同时出现在艺人和专辑中,我尝试使用:从CD中选择艺人,其中专辑像CONCAT(“%”,艺人“%”) 但它一直返
CD
:
artist album
Prince Purple Rain
Adam Prince Charming
我想选择艺人Prince
,因为它同时出现在艺人和专辑中,我尝试使用:从CD中选择艺人,其中专辑像CONCAT(“%”,艺人“%”)
但它一直返回0结果,我不明白为什么它不起作用,有人能帮我吗
编辑:有关“表CD”的详细信息:
artist album
Prince Purple Rain
Adam Prince Charming
James Apple
Furious Banana
Beatles Let It Be
It Come
它应该返回artist
Prince
,it
如果要将记录集合与其他记录集合进行比较,那么像WHERE
子句中的比较这样的简单就不够了。相反,您必须跨记录进行某种聚合。如果'Prince'
在艺术家
和相册
列中出现一次或多次,则以下查询将返回true
SELECT CASE WHEN EXISTS (
SELECT * FROM yourTable
HAVING SUM(CASE WHEN artist LIKE '%Prince%' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN album LIKE '%Prince%' THEN 1 ELSE 0 END) > 0
) THEN "True" ELSE "False" END
此处演示:
这可能对你有帮助,试试这个
SELECT artist FROM yourTable WHERE (SELECT GROUP_CONCAT(album) FROM yourTable) LIKE CONCAT('%',artist,'%');
团体会议
此函数返回一个字符串结果,其中包含来自组(即来自查询结果)的串联非空值。如果没有非NULL值,则返回NULL
有关GROUP\u CONCAT
的更多详细信息,请参见此和您可以使用相同的表进行左联接,并使用类似的条件联接它们
SELECT
t1.artist,
t2.album
FROM
artists t1
left join
artists t2
on t2.album LIKE concat('%', t1.artist, '%')
where
t2.album is not NULL
group by
t1.artist
我认为应该将一个PHP变量传递到查询中:“选择……像“%”这样的相册所在位置”$连接->转义($artist)。“%”
。但描述尚不清楚。您可能意味着某种形式的加入。您想要什么样的输出请提供示例。输出应该是艺术家Prince
,因为它在artist
列和album
column@RuslanOsmanov你能解释更多关于PHP变量的内容并告诉我你不理解的地方吗?这样我可以提供更多信息information@DexD.Hunter,我的意思是,您很可能接受来自用户的搜索字符串,或者作为函数参数,-某种PHP变量。将动态值传递到SQL查询中是很常见的。然后您可能需要类似于$sql=sprintf(“…其中像“%1$s”这样的艺术家或像“%$1s”这样的专辑,$artist_转义)代码>。当前,您正在尝试构建一个类似的表达式,如concat(“%”,album“%”)
。但是album
指的是表格中的每个album
值嗨,谢谢你的回答。但是如果有其他艺术家的名字不是“王子”怎么办?嗨,我为你增加了更多的案例clarification@DexD.Hunter如果要返回常用字符串列表,可能需要使用全文搜索/动态SQL。因此,LIKE只比较同一行中的列?而不是LIKE
本身。如果使用WHERE
子句,则比较单个记录中的列。您的需求需要某种类型的记录聚合。