Вывод из базы

1. Владимир (23.09.2010 / 01:20)
Всем привет! Есть столбец ip в таблице users. Как вывести из неё результаты в случае совпадения 2 или более строк в столбце ip?
например:
aaaaa ip 10.10.10.10
bbbbb ip 10.10.10.10

ccccc ip 20.20.20.20
ddddd ip 20.20.20.20
eeeee ip 20.20.20.20
и т.д.

2. DmitryDick (23.09.2010 / 01:39)
сначала подсчитываешь
<?php

$ip = '127.0.0.1';

$count = mysql_query("select count(*) `count` from `table` where `ip`='".$ip."';");
$count = mysql_fetch_assoc($count);

# если записей больше 1, то выводим их
if ( $count['count'] > 1 ) {

$query = mysql_query("select * from `table` where `ip`='".$ip."';");

while ( $data = mysql_fetch_assoc($query) ) {

echo $data['nick'], ' - ', $data['ip'];

}

}

?>


3. Владимир (23.09.2010 / 01:46)
2. dont give me names, ну так в том и дело, что ip разные и я не знаю их, а нужно вывести совпадение, нескольких например

4. Владимир (26.09.2010 / 00:30)
а так?

id|user|ip
1 |aaa |10.10.10.10
2 |bbb |20.20.20.20
3 |ccc |10.10.10.10
4 |ddd |30.30.30.30

Чтоб вывести:
user : aaa ip : 10.10.10.10
user : ccc ip : 10.10.10.10

5. DmitryDick (26.09.2010 / 03:05)
remove

6. Олег (26.09.2010 / 20:05)
SELECT ip, count(ip) AS cnt FROM tbl GROUP BY ip HAVING COUNT(ip)>=2


7. DmitryDick (26.09.2010 / 22:45)
6, я сначала почти тоже самое написал, но посмотри, что ему надо, и что этот запрос выдаст

8. Димон (26.09.2010 / 23:13)
Нужно все имеющиеся IP записать в массив, потом сравнить данные из массива, а потом уже код из 2 поста.
Думаю разберешся.

9. Владимир (27.09.2010 / 00:05)
8. Bewreks, с чем сравнить?

10. Олег (27.09.2010 / 00:10)
dont give me names, и что же в нем не так, объясни уж...

11. Олег (27.09.2010 / 00:18)
Если группировать ненужно, тогда лучшим вариантом я вижу подцепить джойном таблицу саму на себя
SELECT tbl.`ip` FROM 
( SELECT `ip` FROM table GROUP BY ip HAVING COUNT(ip) >= 2)  AS tbl 
JOIN table USING(ip)


12. Phantom (27.09.2010 / 00:25)
Мой вариант, проверил, работает:

SELECT `users`.*
FROM `users`
LEFT JOIN (
SELECT `ip`, COUNT(`ip`) as `count`
FROM `users`
GROUP BY `ip`
) as `users2`
ON `users`.`ip`=`users2`.`ip`
WHERE `users2`.`count`>1
ORDER BY `users`.`ip` ASC

13. Phantom (27.09.2010 / 00:29)
Да, мой способ более быдлокодский. Впервые вижу ключевое слово "HAVING", пошёл читать ман. =)
UPD: Хм, про USING тоже не знал.
UPD2: HAVING рулит. Это получается через него постусловия можно задавать. Мне порой такие фокусы приходилось делать, потому что я про него не знал.

14. Олег (27.09.2010 / 00:43)
Да, можно в нем использовать и агрегатные функции. Что я и сделал

15. Владимир (28.09.2010 / 03:33)
Всем спасибо, сделал )

URL: https://visavi.net/topics/13959