Php 如何在MySQL中使用LIKE?
我有一张名为music的桌子,上面有一些ID:Php 如何在MySQL中使用LIKE?,php,mysql,Php,Mysql,我有一张名为music的桌子,上面有一些ID: 6983887641 59088763306 116542622632 106436032725763 6750402929 131572223581891 17337462361 56848544614 108089415891178 27659711968 182011613865 8888384363 43780515976 7872609449 38858586087 107901192572009 9028468518 54619473
6983887641 59088763306 116542622632 106436032725763 6750402929 131572223581891 17337462361 56848544614 108089415891178 27659711968 182011613865 8888384363 43780515976 7872609449 38858586087 107901192572009 9028468518 5461947317 11955325695 64075031411 12673567174
我需要对这些ID进行查询。如果执行了类似的查询:
SELECT username FROM music WHERE music LIKE '%107901192572009 9028468518%'
它将返回在其音乐表中具有这些ID的用户的用户名。好啊但问题是,如果我以不同的顺序添加ID,就不会有结果。因此,如果我搜索:
56848544614 107901192572009 or 5461947317 9028468518
它们在表中,但不在顺序中,并且没有结果。我该怎么办
SELECT username FROM music
WHERE music LIKE '%107901192572009%'
AND music LIKE '%9028468518%'
请注意,这将是缓慢的。还请注意,它可能会失火,因为id
可能是另一个id
的一部分。有一种更好的方法可以做到这一点——查找1-to-n关系。如果不是,至少要考虑这样做(以对抗第二个问题):
我想你不想要你想要的
SELECT username FROM music WHERE music IN (6983887641, 59088763306, 116542622632, 106436032725763);
IN是否会查找精确匹配?@Erin-是的,将是精确匹配。@Amadan-我猜测它是一个单独的唯一列。@AdrianCornish:应该是,但不是。另外,您的查询要求用户名包含任何列出的音乐,而OP要求用户名包含所有列出的音乐。:[filler,因为我只是想要笑脸]好的,第一个解决方案成功了。而且一点也不慢。但我还没有尝试过同时进行大量访问的搜索,所以让我们看看。为了解决失火问题,我在表中每个id的开始和结束处添加了一个“.”(点),因此搜索应该是:WHERE music,比如“%.107901192572009.%”。谢谢你的帮助!如果我是你,我宁愿简单地创建一个新表-每行一个音乐id。通过拆分字符串移动所有现有数据,然后转储旧表。为了兼容性,您可以使新表和旧表彼此相似-事实上,它们可以看起来完全相同,只是音乐id更短,使用方式更合适。对于关系数据库来说,这根本不是正确的设计。
SELECT username FROM music WHERE music IN (6983887641, 59088763306, 116542622632, 106436032725763);