сравнение в SELECT не работает

По какой-то причине следующий код (который предназначен для проверки, если запись уже существует):

$query = "SELECT 1 FROM Song WHERE EXISTS(SELECT *
FROM Song WHERE SongTitle = '$songtitle'
AND Duration = '$duration' AND Popularity = '$popularity'
AND Description = '$description')";
$result = pg_query($conn,$query) or die("Query could not be executed");
$row = pg_fetch_row($result);

не работает должным образом, потому что он находит пару, в то время как данные разные. Это происходит специально для 5-й песни (Dance V). Я провел много испытаний, но пока не могу понять. Любой намек будет действительно полезным.

образец текста:

TITLE | ALBUM | ARTIST | DURATION | POPULARITY | DESCRIPTION
Dance I|Glass: Dance (Nos. 1-5)|Philip Glass|19:19|16|https://api.spotify.com/v1/tracks/4v2lPpMv4OXnYWc7Oed9Ax
Dance II|Glass: Dance (Nos. 1-5)|Philip Glass|22:58|10|https://api.spotify.com/v1/tracks/5aVwAZIBbO7OuUwzsXxnQT
Dance III|Glass: Dance (Nos. 1-5)|Philip Glass|18:35|11|https://api.spotify.com/v1/tracks/2rScuezUeKzAjeCqrBe0ZY
Dance IV|Glass: Dance (Nos. 1-5)|Philip Glass|23:31|8|https://api.spotify.com/v1/tracks/515LeLoiveW3VsoLzs3eln
Dance V|Glass: Dance (Nos. 1-5)|Philip Glass|20:14|9|https://api.spotify.com/v1/tracks/77xQaN6fCsy3ZRp1eBbyXq
Dance I|Glass: Dance (Nos. 1-5)|Philip Glass|19:19|0|https://api.spotify.com/v1/tracks/77YpPPHxnqi9VaetU7OXyA
Dance II|Glass: Dance (Nos. 1-5)|Philip Glass|22:58|0|https://api.spotify.com/v1/tracks/7veCJpGBXiwjf4nYF3MIBt
Dance III|Glass: Dance (Nos. 1-5)|Philip Glass|18:35|0|https://api.spotify.com/v1/tracks/766rgBXNJmlpNLNyObbPa6
Dance IV|Glass: Dance (Nos. 1-5)|Philip Glass|23:31|0|https://api.spotify.com/v1/tracks/3xhfqJfBT60JMHzxdijMIL
Dance V|Glass: Dance (Nos. 1-5)|Philip Glass|20:14|0|https://api.spotify.com/v1/tracks/2kKz8qwXIyvV9uZD2BnTjz

Информация о настольной песне:

CREATE TABLE song(
id SERIAL PRIMARY KEY,
songtitle varchar(100),
duration varchar(10),
popularity smallint,
description varchar(100)
);

код:

while(!feof($myfile)) {
$line = fgets($myfile);
$token = strtok($line,"|");
if(feof($myfile)) break; # extra
while($token!=false) {
$word_count++;
if($word_count==1) {
$songtitle = pg_escape_string($token);
} else if($word_count==2) {
$album = pg_escape_string($token);
} else if($word_count==3) {
$artist = $token;
} else if($word_count==4) {
$duration = $token;
} else if($word_count==5) {
$popularity = $token;
} else {
$description = $token;
}
$token = strtok("|");
}
$word_count=0;

$query = "SELECT 1 FROM Song WHERE EXISTS(SELECT *
FROM Song WHERE SongTitle = '$songtitle'
AND Duration = '$duration' AND Popularity = '$popularity'
AND Description = '$description')";
$result = pg_query($conn,$query) or die("Query could not be executed");
$row = pg_fetch_row($result);
if($row[0])
{
printf("\n");
echo 'Entry already exists: ';
printf("\n");
echo 'songtitle: ';
echo $songtitle;
printf("\n");
echo 'Description: ';
echo $description;
printf("\n");
}
else
{
$query = "INSERT INTO Song (songtitle, duration, popularity, description) VALUES ('$songtitle','$duration','$popularity','$description')";
$result = pg_query($conn,$query) or die("Query could not be executed");
}
}

выход:

postgres@user-ThinkCentre-A55:/var/www/html/songtest$ php -q add.phpEntry already exists:
songtitle: Dance V
Description: https://api.spotify.com/v1/tracks/77xQaN6fCsy3ZRp1eBbyXqpostgres@user-ThinkCentre-A55:/var/www/html/foodtest$

2

Решение

Это, вероятно, должен быть комментарий, но почему использование существует?

$query = "SELECT top 1 *
FROM Song WHERE SongTitle = '$songtitle'
AND Duration = '$duration' AND Popularity = '$popularity'
AND Description = '$description'";

используйте top 1, если у вас только один ряд.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]