Вывод из базы
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