2017-05-18 7 views
0

データベース内の「アーティスト」と「グループ」の両方のデータ数を数える2つのクエリがあります。アーティストやグループ(またはその両方)に表示するデータがある場合、そのデータが両方とも0を返し、何も表示しない場合は、メッセージを表示します。2つのクエリを使用してphp if ... else文を使用する

<?php if (($numrowsartists==0)OR($numrowsgroups==0)) { 

} else { 
     echo "There is information to display."; 
     } 
?> 

以下は、私が持っているクエリです:事前に

$query = "SELECT COUNT(*) FROM `Credit_To_Artist` AS c2a 
INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id 
INNER JOIN `Artist` AS a ON a.artist_id = c2a.artist_id 
WHERE c2a.song_id = $id"; 

$res = mysql_query($query); 

$numrowsartists = mysql_fetch_assoc($res); 

$query = "SELECT COUNT(*) FROM `Credit_To_Artist` AS c2a 
INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id 
INNER JOIN `Artist_Group` AS ag ON ag.group_id = c2a.group_id 
WHERE c2a.song_id = $id 
ORDER BY ag.group_name ASC"; 

$res = mysql_query($query); 

$numrowsgroups = mysql_fetch_assoc($res); 

おかげ

は私が動作していないように次のコードを持っています。私はそれがおそらく超基本的な修正だと確信していますが、私はまだ非常にPHPに新しいといくつかの助けに感謝しています。あなたは、列名のエイリアスを使用して値frorm行などをgettheすべき

+4

mysql_ *関数は、PHP 5.5.0で廃止、およびPHP 7.0.0のように除去されています。 [PDO](https://secure.php.net/manual/en/pdo.prepared-statements.php)または[mysqli](http://php.net/manual/en/mysqli)を使用するようにコードを切り替えてください。 quickstart.prepared-statements.php)を使用してください。 – aynber

+0

mysql_fetch_assocは行をフェッチするので、0になりません。代わりにnum_rows関数を使用して行数を数えます。 – aynber

+0

dbスキーマと値を投稿する必要があります。また、 'NULL'!=' 0'または "empty"を覚えておく必要があります。 –

答えて

1

$query = "SELECT COUNT(*) as num_artists FROM `Credit_To_Artist` AS c2a 
INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id 
INNER JOIN `Artist` AS a ON a.artist_id = c2a.artist_id 
WHERE c2a.song_id = $id"; 

$res = mysql_query($query); 

$row = mysql_fetch_assoc($res); 
$numrowsartists = row['num_artists']; 

$query = "SELECT COUNT(*) as num_groups FROM `Credit_To_Artist` AS c2a 
INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id 
INNER JOIN `Artist_Group` AS ag ON ag.group_id = c2a.group_id 
WHERE c2a.song_id = $id 
ORDER BY ag.group_name ASC"; 

$res = mysql_query($query); 
$row = mysql_fetch_assoc($res); 
$numrowsgroups = row['num_groups']; 
0

いくつかのソリューションがありますが、最も簡単な以下のもの:

if($numrowsartists[0]+$numrowsgroups[0] > 0) 

しかし、人々が言っ​​てきたように、あなたをもうmysql_ *関数を使うべきではありません。 IDがユーザー入力であると仮定すると、実際にはプリペアドステートメントを使用する必要があります。 はまた、あなたは、単一のクエリで両方のテストを処理することができます:

$stmt = $con->mysqli_prepare("SELECT COUNT(1) as `count` FROM `Credit_To_Artist` AS c2a 
     INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id 
     INNER JOIN `Artist` AS a ON a.artist_id = c2a.artist_id 
     INNER JOIN `Artist_Group` AS ag ON ag.group_id = c2a.group_id 
     WHERE c2a.song_id = ?"); 
$stmt->bind_param('i',$id); 
$stmt->execute(); 
if($stmt->get_result()->fetch_array()[0] > 0){ 
    ... 
}else{ 
    //message that nothing was found 
} 
関連する問題