2010-07-01 6 views
1

У меня есть следующее внутри цикла foreach (с отображением моих различных видео), я пытаюсь отобразить альтернативный текст для трех лучших проголосовавших видео. Что же я делаю не так (много понятно) ...в запросе массива sql

$sql = "SELECT video_id FROM videos WHERE displayable='y' ORDER BY votes desc LIMIT 0,3"; 
$result = mysql_query($sql); 
$row = @mysql_fetch_array($result); 

if(in_array($video->getProperty('video_id')) == $row['video_id']) { 
do this... 
} else { 
do this.. 
} 

ответ

1

Во-первых, заменить код с некоторой погрешностью предотвращающей методы, как так!

$sql = "SELECT video_id FROM videos WHERE displayable='y' ORDER BY votes desc LIMIT 0,3"; 
if(false != ($result = mysql_query($sql)) 
{ 
    $row = mysql_fetch_assoc($result); //Dont need the @ restraint as the result is not false above. 
    //Also to get associate keys you need to use mysql_fetch_assoc 
    if($video->getProperty('video_id') == $row['video_id'])) //Remove the in array as your directly comparing the to entities with == 
    { 
     //Match 
    }else 
    { 
     //Video does not match 
    } 
} 

Ваша главная проблема была mysql_fetch_array(), пожалуйста, исследовать различия с mysql_fetch_array() и mysql_fetch_assoc();

-

Edit: Путь я бы

//Change the query and the loop way. 
    $sql = "SELECT video_id FROM videos WHERE displayable='y' AND video_id != '".(int)$video->getProperty('video_id')."' ORDER BY votes desc LIMIT 0,3"; 
    if(false != ($result = mysql_query($sql)) 
    //Use the @ restraint if you have E_NOTICE on within E_Reporting 
    { 
     while($row = mysql_fetch_assoc($result)) 
     { 
      //Print the $row here how you wish for it to be displayed 
     } 
    }else 
    { 
     //We have an error? 
     echo '<strong>Unable to list top rated videos, please check back later.</strong>' 
    } 
} 
+0

да, спасибо, я знаю различия, вижу важность. – kalpaitch

+0

Другой способ, которым вы можете это сделать, - это модифицировать запрос, чтобы выбрать hte top 3 bar для текущего видео, так что '$ sql =" SELECT video_id FROM videos WHERE displayable = 'y' AND video_id! = '". (Int) $ video-> getProperty ('video_id'). "'ORDER BY votes desc LIMIT 0,3"; 'тогда вам не понадобится инструкция if() для удаления текущего видео из списка 3 лучших. – RobertPitt

1

mysql_fetch_array возвращает только одну строку, вы должны перебрать свои результаты, чтобы создать массив, содержащий три верхние идентификаторы.

$sql = "SELECT video_id FROM videos WHERE displayable='y' ORDER BY votes desc LIMIT 0,3"; 
$result = mysql_query($sql); 
while($row = @mysql_fetch_array($result)) { 
    $topthree[] = $row["video_id"]; 
} 

Затем вы можете использовать in_array, но с правильным синтаксисом:

if(in_array($video->getProperty('video_id'), $topthree)) { 
do this... 
} else { 
do this.. 
} 
+0

приветствий для этого, это то, что я целился в сторону и отлично работает. – kalpaitch

+0

приветствуется, но вы приняли другой ответ :-) – Jon

+0

Он не имеет «$ topthree», но он выбирает верхнюю 3 с запросом и следит за тем, чтобы у него не было текущего воспроизводимого видео в выбранном из элементов db. – RobertPitt

Смежные вопросы