Php 在mysql中,如何将一列中的属性值与另一列中的属性值进行比较?

Php 在mysql中,如何将一列中的属性值与另一列中的属性值进行比较?,php,mysql,multiple-columns,Php,Mysql,Multiple Columns,我是mysql新手。 我读过stackoverflow和其他几篇文章。他们都建议使用LIKE,但我仍然无法得到正确的结果。我想知道问题是否是由包含信息的不同行引起的 假设我有一张像这样的talbeCD: artist album Prince Purple Rain Adam Prince Charming 我想选择艺人Prince,因为它同时出现在艺人和专辑中,我尝试使用:从CD中选择艺人,其中专辑像CONCAT(“%”,艺人“%”) 但它一直返

我是mysql新手。 我读过stackoverflow和其他几篇文章。他们都建议使用LIKE,但我仍然无法得到正确的结果。我想知道问题是否是由包含信息的不同行引起的

假设我有一张像这样的talbe
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
子句,则比较单个记录中的列。您的需求需要某种类型的记录聚合。