agentor
20.10.2009 - 22:48
у меня возник вопрос:
создал базу для друзей( что бы показывало кто у кого друг) но вывод делаю таким образом что бы в профиле показывало только друзья но не сам пользователь.
у меня не как не получается вытащит 2 запрос из цикла и оптимировать его в один т.к присутствует (OR) в WHERE, который мне нужен
мне нужен как бы перекрёстный запрос..
посоветуйте что нибудь пожалуйста
PHP |
$fgetaaa = mysql_query("SELECT COUNT(*) FROM user_freunde WHERE (userid = '".$b["id"]."' OR friendid = '".$b["id"]."') AND status='ok'"); $row2 = mysql_fetch_row($fgetaaa); $faaanz = $row2[0];/// = COUNT
$resfrend = mysql_query("SELECT * FROM user_freunde WHERE (userid = '".$b["id"]."' OR friendid= '".$b["id"]."') AND status='ok' LIMIT 10"); while($rowfrend = mysql_fetch_array($resfrend)) { $facc++; if($rowfrend["friendid"]== $b["id"]) $fdid = $rowfrend["userid"]; else $fdid = $rowfrend["friendid"];
$getuser = mysql_query("SELECT * FROM user WHERE id='".$fdid."'"); $row = mysql_fetch_array($getuser);
///USER DATA print(" ".$row["user"].""); // END USER DATA
} |
HTML |
CREATE TABLE `user_freunde` ( `id` bigint(20) NOT NULL auto_increment, `userid` bigint(20) default NULL, `friendid` bigint(20) default NULL, `status` varchar(2) collate latin1_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM;
INSERT INTO `user_freunde` VALUES (2, 1, 6, 'ok'); INSERT INTO `user_freunde` VALUES (1, 2, 1, 'ok'); |
если я делаю таким образом
PHP |
SELECT user_freunde.id, user_freunde.userid, user_freunde.friendid, user_freunde.status, user.user as username, user.geschlecht, user.geburtsdatum FROM user_freunde LEFT JOIN user ON user_freunde.friendid = user.id WHERE (user_freunde.userid = '".$b["id"]."' OR user_freunde.friendid = '".$b["id"]."') AND user_freunde.status='ok' |
то у меня выводит из friendid а также и самого меня в моём профиле, что мне ненужно
$b["id"] = USER ID
вобще можно ли сделать типа
PHP |
LEFT JOIN user ON user_freunde.friendid = user.id [b]OR[/b] user_freunde.userid = user. |
Спустя 9 часов, 22 минуты, 25 секунд (21.10.2009 - 07:11) olgatcpip написал(а):
если нужно выводить что-то кроме id такого-то, то...
where (... or ...) and id<>значение
Спустя 9 часов, 10 минут, 15 секунд (21.10.2009 - 16:21) agentor написал(а):
Цитата (olgatcpip @ 21.10.2009 - 04:11) |
если нужно выводить что-то кроме id такого-то, то... where (... or ...) and id<>значение |
не совсем понятен ответ...
как всё из цикла вытащит из 2х запросов в один сделат. эрто мне нужно..
неужели нет ниукого идей?
меня интересует из 2х один имея виду запросы
$resfrend и $getuser
Спустя 9 минут, 42 секунды (21.10.2009 - 16:31) Gram написал(а):
Че то не понятная логика. Вы сами у себя в друзьях находитесь?
SQL |
"SELECT friendid, COUNT(friendid) AS num FROM user_freunde WHERE userid = `".$b['id']."` AND status=`ok` LIMIT 10"; |
Спустя 3 дня, 20 часов, 12 минут, 38 секунд (25.10.2009 - 13:43) agentor написал(а):
спасибо с этим запросом разобрался...теперь другой мешает...
как этот скрестить
PHP |
select sum(case seeder when 'yes' then 1 else 0 end) as activeseed, sum(case seeder when 'no' then 1 else 0 end) as activeleech, connectable as konnekted from peers WHERE userid = ".(int)$user_id." |
с этим
PHP |
$res = mysql_query("SELECT COUNT(*) FROM messages WHERE receiver=" . $user_id. " && unread='yes'") or die("Проводится обработка файлов!!!Подождите..."); $arr = mysql_fetch_row($res); $unread = $arr[0]; |
должно быть что то типа
PHP |
select sum(case seeder when 'yes' then 1 else 0 end) as activeseed, sum(case seeder when 'no' then 1 else 0 end) as activeleech, connectable as konnekted, COUNT(messages.receiver) AS counter FROM peers LEFT JOIN messages ON peers.userid = messages.receiver WHERE userid = 5 GROUP by connectable, |