gpt4 book ai didi

php - 检查 mysql 列中是否存在值

转载 作者:行者123 更新时间:2023-11-29 01:56:28 25 4
gpt4 key购买 nike

有没有办法检查一个值是否存在于 mysql 列中?我有表格歌曲,还有一些列,其中一个称为“agent_ip”,我将在其中放置将访问该站点的所有用户 ip 的列表/数组。我需要检查当前用户 ip 是否出现在“agent_ip”列中。这是我的一些代码:

public function voteSong($song_id, $case, $agent_ip) {           
$query = $this->link->prepare("SELECT * FROM songs WHERE id = ? LIMIT 1");
$query->bindValue(1, $song_id);
$query->execute();
$rowcount = $query->rowCount();

if ($rowcount != 0)
{
if (!in_array($agent_ip, $r['ip']))
{
if ($case === 'like')
{
while($r = $query->fetch())
{
$vote = $r['votes'] + 1;
}
}
elseif ($case === 'dislike')
{
while ($r = $query->fetch())
{
if ($r['votes'] > 0)
{
$vote = $r['votes'] - 1;
}
else
{
$vote = 0;
}
}
}
$query = $this->link->prepare("UPDATE songs SET datetime = ?, votes = ?, agent_ip = ? WHERE id = ?");
$query->execute(array(date("Y-m-d H:i:s"), $vote, $agent_ip, $song_id));
}
}
}

if(!in_array($agent_ip, $r['ip'])) 行包含无法使用的错误函数,但我需要 mysql 的替代方法。 $r['ip'] 变量是来自 'agent_ip' 列的数据,看起来像这样 127.0.0.1, 127.0.0.1, 127.0.0.1 (使用 127.0.0.1 只是例如,每个 127.0.0.1 是一个不同的 ip)

最佳答案

如果您只检查单个 IP,为什么不修改您的查询:

"SELECT * FROM songs WHERE id = ? LIMIT 1"

收件人:

"SELECT * FROM songs WHERE id = ? AND agent_ip = ? LIMIT 1"

当您只查询特定 IP 并返回一行时,查询整个结果集似乎有点浪费。

编辑:您当前的方法效率极低,每次您要查询一首歌曲以检查 IP 是否存在时,您都会传递一个唯一的 agent_ip,这很好,但您正在创建每次您从中拉回属于该歌曲的所有信息时,都会有一个新的数据库连接。

假设我们有 1 首歌曲和 3 个 IP,目前该应用程序将像这样工作:

1) Call the method, passing IP_1
2) Query the database getting all songs for ID1
3) Check if IP_1 is in the result set and do process

4) Call the method, passing IP_2
5) Query the database getting all songs for ID1
6) Check if IP_2 is in the result set and do process

7) Call the method, passing IP_3
8) Query the database getting all songs for ID1
9) Check if IP_2 is in the result set and do process

如您所见,这里有很多重复,这会随着应用的扩展而影响您的应用性能,您最好修改当前函数以接受预先准备好的歌曲的结果列表仅查询一次,然后通过将结果数组与您的唯一 IP 地址一起传递来递归调用检查函数。

更新 你说过 我知道我需要有 2 个表(1 = 歌曲;2 = 投票)。但我无法想象我将如何从数据库中获取歌曲,按投票数量排列。

你应该阅读 SQL 的 JOIN 文档,概念很简单 - JOIN 允许你根据你想查询的内容拉回一组更详细的信息,在你的例子中你可能想找到找出一首特定歌曲有多少票。

您的表格可能看起来像:

Songs 
SONG_ID Primary Key
SONG_TITLE
SONG_DURATION
SONG_TAGS

Votes
VOTE_ID Primary Key
SONG_ID Foreign Key - (references the song_id table)
VOTE_RES Bool (either 0 for no, 1 for yes)
AGENT_IP Who sent the vote

然后您可以通过执行连接找出有多少人说他们喜欢这首歌:

SELECT * FROM songs 
JOIN votes
ON songs.song_id = votes.song_id
WHERE songs.song_id = 1
AND votes.vote_res = 1;

这将返回 ID 为 1 的所有歌曲及其所有关联的点赞数。希望能有所帮助:)

关于php - 检查 mysql 列中是否存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611877/

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