2010-10-23 2 views
0

Использование PHP mysql_num_rows() возвращает «1» при выполнении запроса ниже в таблице ниже, когда нет соответствующих строк.mysql_num_rows() не работает с SUM()?

После тестирования выяснилось, что проблема возникает, когда я использую функцию SUM() в запросе. Если я возьму SUM() из запроса, mysql_num_rows() вернет «0», как должно.

Есть ли что-то еще, что я должен использовать вместо mysql_num_rows(), чтобы узнать, есть ли соответствующая строка в таблице?

Таблица:

name | students_money | grade 
George | 5 | A 
Bill | 10 | A 
Dan | 7 | A 

Код:

$sql = "SELECT SUM(students_money) AS sum_money FROM students_table WHERE name = 'Tom' AND name = 'Jack'"; 
$result = @mysql_query($sql, $con) or die(mysql_error()); 

$num_rows = mysql_num_rows($result); 

if ($num_rows < 1) { 

    echo "not everyone has paid"; 
    exit; 

} 

while($row = mysql_fetch_array($result)) { 

    $sum_money = $row[sum_money]; 
    $total = $total + $sum_money; 

} 

ответ

3

mysql_num_rows() указывает количество строк, возвращаемых запросом базы данных. В вашем случае всегда возвращается одна строка, потому что всегда есть одна сумма. Сумма может быть 0, конечно.

Возможно, вам будет неплохо проверить ваш запрос в браузере запросов mysql. Возможно, вы ищете что-то вроде этого?

SELECT name, SUM(students_money) AS sum_money 
FROM students_table 
GROUP BY name; 

Это будет группировать суммы на основе имени. Чтобы пропустить 0 сум, вы можете добавить это:

HAVING sum_money > 0; 
4

SUM() является агрегатной функцией. Он принимает все строки, которые возвращаются для группы, и добавляет их.

Поскольку у вас нет предложения GROUP BY, оно суммирует значения всех строк, даже если их нет. Затем он возвращает общее число в виде одной строки, поэтому должно быть только 1 строка.

Если вы уточните, что хотите вернуть, я могу попытаться помочь вам написать заявление, чтобы вернуть его.

+0

Я хочу, чтобы проверить, нет ли Тома и Джека в таблице, а также используя функцию SUM(). Это возможно? – Mark

+0

Если вы хотите вернуть сумму для обоих из них, вы не можете сделать это в одном запросе. Если вы хотите узнать общее количество для каждого имени, вы можете использовать запрос @nhnb. Затем вы можете выполнить сумму в PHP. В противном случае вам нужно будет сделать запрос, чтобы узнать, оба ли они заплатили, а затем второй запрос, чтобы получить сумму. –

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