2013-04-16 11 views
0

Это первый раз, когда я использую SELECT запросов без ввода. Я хотел бы проверить таблицу на дубликаты. В результате мне нужно только подсчитать результат.SELECT запрос для проверки дубликатов без ввода

Так что у меня это:

SELECT 
     `field a`, `field b`, `field c` 
FROM 
     table 
WHERE 
     `a` AND `b` AND `c` 
GROUP BY 
    duplicates 
HAVING 
    COUNT(duplicates) > 1 

бы это проверить таблицу дубликатов, когда структура, как:

field a | field b | field c 
    a   b   c 
    a   b   c 
    d   e   f 

И как я могу получить результат? Было бы просто num_rows или я получу целое число в результате обратно из запроса?

Обычно я использую num_rows, чтобы получить результат из запроса, как, что:

$query = $db->query("SELECT ..."); 
$result = $query->num_rows; 
if ($result !== 0){do something} 

Там обычно должно быть разница между num_rows и результат, потому что, если я буду рассчитывать с помощью num_rows он будет возвращать 2 потому что 2 имеют условие a AND b AND c, поэтому я думаю, что запрос сверху вернет 1 в результате для найденного дубликата 1. Или я ошибаюсь?

Спасибо большое.

+0

Я думаю, что предложение WHERE является бесполезным. –

ответ

2

Если вы определили, как повторяющиеся две записи с тем же A, B и C, то вы можете использовать запрос следующим образом:

SELECT A, B, C, COUNT(*) counter 
FROM `MYTABLE` 
GROUP BY A,B,C 
HAVING COUNT(*) > 1 

Учитывая ваш стол имеет 3 пунктов, как в ваш вопрос, ваш результат будет:

A | B | C | counter 
---+-----+-----+-------- 
'a' | 'b' | 'c' | 2 

для извлечения результатов в PHP:

while ($row = mysql_fetch_assoc($result)) { 
    $a = $row['A']; 
    $b = $row['B']; 
    $c = $row['C']; 
    $counter = $row['counter']; 
    // Do something with your values 
} 

Пожалуйста, обратите внимание, чтобы использовать MySQLi или PD О. Хорошая отправная точка: mysqli or PDO

+0

привет и спасибо. извините за это, но как я могу получить результат? так что я могу работать с результатом? обычно я использую num_rows для запроса, но это будет правильно, потому что в запросе уже есть условие> 1. – bonny

+0

Вы имеете в виду, как вы извлекаете результаты из PHP или из mysql? – agim

+0

Я обновил свой вопрос, чтобы показать, что я имею в виду. Благодарю. – bonny

1

Я не уверен, что я вполне понимаю вопрос, но если вы хотите отображать значения и подсчеты, где существует более одной строки с одинаковыми значениями всех трех полей, вам может потребоваться что-то вроде ...

SELECT FIELD_A, FIELD_B, FIELD_C, COUNT(*) 
    FROM MY_TABLE 
    GROUP BY FIELD_A, FIELD_B, FIELD_C 
    HAVING COUNT(*) > 1; 
+0

привет и спасибо. извините за это, но как я могу получить результат? так что я могу работать с результатом? Обычно я использую num_rows для запроса, но это будет правильно, потому что в запросе уже есть условие> 1. – bonny

+0

@bonny, у меня нет рабочего примера, но если я правильно вернусь, вам нужно будет вызвать 'mysqli_fetch_array' на ваш объект' $ query'. –

+0

привет, это все еще не то, что я ищу. прости. языковые трудности. взгляните на мой стол. (a И b И c) ровно два раза в этом db. поэтому запрос должен рассчитывать duplicate = yes (в результате -> 1). – bonny

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