簡體   English   中英

SELECT中的比較不起作用

[英]comparison in SELECT isn't working

由於某種原因,以下代碼(用於檢查條目是否已存在):

$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);

無法正常工作,因為它在數據不同的情況下找到了一對。 這是專門針對第五首歌(Dance V)發生的。 我已經做了很多測試,但我還不能弄清楚。 任何提示將非常有幫助。

txt樣本:

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.php


Entry already exists: 
songtitle: Dance V
Description: https://api.spotify.com/v1/tracks/77xQaN6fCsy3ZRp1eBbyXq


postgres@user-ThinkCentre-A55:/var/www/html/foodtest$

這可能應該是評論,但是為什么使用存在呢?

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

如果僅一行,則使用top 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM