2013-09-13 5 views
1

Я пытался создать программу, которая будет читать из моей базы данных все столбцы и если эти столбцы имеют одинаковый возраст, появляются более одного раза (например, если две строки имеют одинаковый возраст 15, эти два строки должны быть показаны и т.д.)HAVING не показывает все результаты

Это код, который я пытался сделать:

include('dbcon_3.php'); 

if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

$sql = "SELECT * FROM table2 GROUP BY Age HAVING (COUNT(Age) > 1)"; 
$result = $mysqli->query($sql); 
if ($result->num_rows > 0) { 
    while ($row = $result->fetch_row()) { 
    for ($j = 0; $j <= count($row) - 1; $j++) { 
     echo $row[$j]; 
    } 
    } 
} else if ($result->num_rows == 0) { 
    echo "Not found"; 
} 

в результате из этого кода является лишь один из строк, которые должны быть появились (я тестировал на три ряда, один имел возраст 16 лет и два в возрасте 15 лет. Из последних двух только один появился на экране).

Заранее спасибо.

+0

удалить группу с помощью и попробовать –

+0

Сначала немного SQL-ошибка в запросе .. вы не можете использовать * in (Select * ... Group By) с условием Group by ... ie Вам нужно указать конкретные столбцы в Select Statement при использовании Group By Clause ... example (Выбрать A, B, C From TableName Group By A, B, C) –

+1

@Fayeq К сожалению, некоторые механизмы БД позволяют это (я думаю, что MySQL делает), в то время как другие (особенно Oracle). –

ответ

3

GROUP BY сворачивает ваши хиты. Вы можете решить эту проблему так:

SELECT * FROM table2 WHERE Age IN 
(SELECT Age from table2 GROUP BY Age HAVING (COUNT(Age) > 1)) 
+0

Действительно отличный ответ! – user2775107

1

Вы также можете сделать с подзапросом

SELECT table2.* FROM table2 
JOIN 
(SELECT age FROM table2 GROUP BY Age HAVING (COUNT(Age) > 1)) AS temp 
ON temp.age=table2.age 
0
SELECT Surname 
FROM table2 
GROUP BY Name 
group by Age 
HAVING (COUNT(Age) > 1) 
Смежные вопросы