2012-02-13 4 views
0

Я писал сценарий для отображения имен пользователей на основе того, назначен ли им четный или нечетный идентификатор комментария. Он вызывает данные из двух разных таблиц в одной базе данных. Вот таблица данных:Почему этот скрипт не работает? (нечетное/четное)

Таблица «комментарии» содержит столбцы commentid, tutorialid, name, date: Таблица «winners» имеет пулы столбцов, pool2, pool3, pool4, pool5, pool6, pool7. В «комментариях» таблицы есть несколько строк, которые обновляются через пользовательский ввод. Таблица «победители» имеет только 1 строку с числами, которые генерируются случайным образом ежедневно.

Первая часть скрипта, которая отображает «Результат 1» и «Результат 2», работает правильно. Часть, которая не работает, является частью, вызывающей имена пользователей. Я только хочу отображать имена пользователей, которые обрабатываются с результатом, который отображается IE, если выбрано Result 1, тогда я хочу, чтобы имена пользователей отображались даже с «комментариями».

<?php 
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error"); 
mysql_select_db('dbname', $db); 

$query = "SELECT pool FROM winners"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
    if ($row['pool'] % 2) { 
     echo "<h4>Result 1</h4>"; 
     $names = get_names(1); 
     foreach($names as $name) { 
      echo $name . "<br/>"; 
     } 
    } else { 
     echo "<h4>Result 2</h4>"; 
     $names = get_names(0); 
     foreach($names as $name) { 
      echo $name . "<br/>"; 
     } 
    } 

function get_names($pool_result) 
{ 
    $name_array = array(); 

    $query = "SELECT * FROM comments where mod('commentid',2) = $pool_result"; 
    $result = mysql_query($query); 

    while ($row = mysql_fetch_array($result)) { 
     array_push($name_array, $row['name']); 
    } 

    return $name_array; 
} 
?> 

Может ли кто-нибудь понять, почему это не работает?

+0

Вы подключения к базе данных в два раза ... – Borealid

+0

лол, ты прав. Я исправил это, но он все еще не решает мою проблему. – user1206214

ответ

0

Добавление кавычки commentid рассматривает его как строку, и вы не можете моднику строку целым числом. Попробуйте следующие вместо:

$query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";

Это было взято из следующего Stack вопрос: select row if the "value" % 2 = 1. MOD()

+0

Это исправлено, спасибо – user1206214

+0

Нет проблем. Рад, что это сработало! –

+0

Ugh, теперь я все время получаю ошибку, не могу переопределить функцию get_names. Мне нужно использовать варианты этого сценария mulitple раз на той же странице – user1206214

1

Операция SELECT с модом не относится к полю. Должны быть backticks вместо одиночных кавычек. Одиночные кавычки указывают строчную константу, которая приведет к постоянному набору результатов (mod('commentid',2), по-видимому, имеет результат 0). Это должно быть что-то вроде этого:

$query = "SELECT * FROM comments where mod(`commentid`,2) = $pool_result"; 
+0

Хм, я просто попробовал ваше предложение, вставив backticks вокруг любой комбинации, возможной в этой строке, и я все равно либо не получаю никаких выходных данных, либо ошибки – user1206214

+0

@ user1206214: Если вы запустите этот запрос самостоятельно (например, в клиенте командной строки), вы получить ожидаемый результат? –

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