|
|
|
| здравствуйте.
Подскажите каким запросом можно сделать подсчет количества совпадений по полю name.
id | name
1 | Александр
2 | Виктор
3 | Евгений
4 | Виктор
5 | Алексей
6 | Михаил
7 | Виктор
8 | Евгений
|
Запрос должен вывести число 2, т.к. имеется два совпадения (Виктор и Евгений).
И каким запросом можно получить все ID, где есть совпадения?
Виктор:
ID: 2
ID: 4
ID: 7
Евгений:
ID:3
ID:8
|
| |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 06:35)
| | как-то так:
SELECT COUNT(*) AS res
FROM
(
SELECT name, COUNT(name) AS cnt
FROM tbl
GROUP BY name
HAVING COUNT(name) > 1
) AS t
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 07:49)
| | Спасибо
вроде подсчет работает нормально
а не подскажете каким запросом можно получить все ID, где есть совпадения?
вывод в таком виде
Виктор:
ID: 2
ID: 4
ID: 7
Евгений:
ID: 3
ID: 8
|
| |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 09:00)
| | >а не подскажете каким запросом можно получить все ID, где есть совпадения?
Можно поступить следующим образом.
Взять внутренний запрос и соединить его (JOIN) по полю name ( USING(name) ) с копией исходной таблицы.
>вывод в таком виде
SQL выдает данные в виде прямоугольных таблиц.
В затребованном виде данные придется укладывать уже на уровне приложения. | |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 06:35)
| | вот вроде написал запросик.
<?php
$sql_name = mysql_query("SELECT name, count(name) AS cnt FROM users WHERE name !='' GROUP BY name HAVING COUNT(name)>=2");
if(mysql_affected_rows() < 1){
echo 'Совпадений не найдено!';
}else{
while($name = mysql_fetch_assoc($sql_name)){
$name_user = htmlspecialchars(trim($name['name']));
$col = abs(intval($name['cnt']));
echo '<div class="p">
<b>Имя: '.$name_user.'</b> ['.$col.']<br/>';
$sql_user = mysql_query("SELECT * FROM users WHERE name='$name_user' ORDER BY id");
while($user = mysql_fetch_assoc($sql_user)){
echo 'ID: '.$user['id'].'<br/>';
}
}
}
?>
|
Не подскажете как искать совпадения по двум полям?
id | name | phone
1 | Александр | 777777
2 | Виктор | 555444
3 | Евгений | 228833
4 | Виктор | 454454
5 | Алексей | 223885
6 | Михаил | 664488
7 | Виктор | 990088
8 | Евгений |228833
|
должно вывести запросом так:
Имя: Евгений Тел.: 228833 [2]
ID:3
ID:8
|
| |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 19:08)
| | WHERE name = 'Евгений' AND phone = '228833'
если Вы про это. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 19:11)
| | Нет. Вы не поняли.
В этом запросе ищу совпадения по полю name:
<?
$sql_name = mysql_query("SELECT name, count(name) AS cnt FROM users WHERE name !='' GROUP BY name HAVING COUNT(name)>=2");
?>
|
Как там добавить ещё и поиск совпадений по полю phone (т.е. по name && phone)? | |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 19:18)
| | Можно попробовать ввести именнованный ключ по двум полям и подставлять его имя в count(). | |
|
|
|
|
|
|
|
для: cheops
(16.02.2011 в 19:21)
| | Можно на примере?
А то со сложными запросами я неочень хорошо работаю | |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 19:23)
| | Нет, погорячился, с именованным индексом COUNT() работать не будет. | |
|
|
|
|
|
|
|
для: Beatus
(16.02.2011 в 19:18)
| | GROUP BY name, phone
? | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 19:22)
| | точно, как то не додумался =)
спасибо вроде работает | |
|
|
|