id friend_author friend_address
1 2 13
2 2 11
3 8 11
4 11 13
Где мой id (11). Например когда я кого то добавляю в друзья мой id садится в friend_address а когда меня добавляют то в friend_author. Тут видно что я двоих добавил в друзья под id (2 и 8) а id (13) добавил меня к себе. Проблема в том что я не могу нормально вытащить эти данные из базы. хочу сделать такой запрос чтоб выходили те id пользователей с которыми я дружу, значит (2,8,13). Запрос должен вытаскивать id которые связаны со мной и не должен выходить мой id, только те которые связаны со мной. я столько собирал сайт и мне все портит эта вещь.
Спустя 15 минут, 5 секунд (1.01.2010 - 19:57) vagrand написал(а):
select friend_author, friend_address
from friends
where friend_author = 11 or friend_address = 11
from friends
where friend_author = 11 or friend_address = 11
Спустя 19 минут, 9 секунд (1.01.2010 - 20:16) cyberx написал(а):
ну я сделал такой запрос:
а что суда записать чтоб выходили все нужние id? если пишу echo $myrow['friend_author']; то выходит (2,8,11) а если echo $myrow['friend_address']; то (11,11,13) а надо чтоб выходило (2,8,13)
$result = mysql_query("select friend_author, friend_address from friends where friend_author = '$my_id' or friend_address = '$my_id'",$db);
$myrow= mysql_fetch_array($result );
do
{
echo $myrow['friend_author'];
}
while($myrow= mysql_fetch_array($result ));
а что суда записать чтоб выходили все нужние id? если пишу echo $myrow['friend_author']; то выходит (2,8,11) а если echo $myrow['friend_address']; то (11,11,13) а надо чтоб выходило (2,8,13)
Спустя 8 минут, 35 секунд (1.01.2010 - 20:25) sergeiss написал(а):
Я предлагаю сделать 2 запроса, которые объединить через union в один запрос:
По первой части будут выбраны (из твоего примера) 2 и 8, по второй части - 13.
Можно добавить еще и второй параметр, чтобы четко видеть "направление дружбы".
select friend_author as friend_id from friends where friend_address = 11
union
select friend_address from friends where friend_author = 11
order by friend_id
По первой части будут выбраны (из твоего примера) 2 и 8, по второй части - 13.
Можно добавить еще и второй параметр, чтобы четко видеть "направление дружбы".
Спустя 17 минут, 57 секунд (1.01.2010 - 20:43) cyberx написал(а):
а как он будет выглядит? я два запроса еще не делал. Так:
так ошибки показывает
$result = mysql_query("select friend_author as friend_id from friends where friend_address = '$my_id' union select friend_address from friends where friend_author = '$my_id'",$db);
$myrow= mysql_fetch_array($result );
do
{
echo $friend_id;
}
while($myrow= mysql_fetch_array($result ));
так ошибки показывает
Спустя 5 минут, 34 секунды (1.01.2010 - 20:48) sergeiss написал(а):
cyberx - ЗАБУДЬ ПРО ЦИКЛ DO-WHILE при выборке данных из БД!!!
А во-вторых, какие именно ошибки? Я же ведь указал "абстрактное" имя таблицы, т.к. ты не указал реальное
Укажи имя именно своей таблицы.
А во-вторых, какие именно ошибки? Я же ведь указал "абстрактное" имя таблицы, т.к. ты не указал реальное

Спустя 7 минут, 48 секунд (1.01.2010 - 20:56) cyberx написал(а):
a какой цикл использовать при выборке? ну вместо 11 должен садится id. зашел человек на страницу со своим id и там вышли его друзья. это я привел пример чтоб легче было понять
Спустя 14 минут, 25 секунд (1.01.2010 - 21:10) sergeiss написал(а):
Цитата (cyberx @ 1.01.2010 - 21:56) |
a какой цикл использовать при выборке? |
Спустя 13 минут, 44 секунды (1.01.2010 - 21:24) cyberx написал(а):
да спасибо щас посмотрел, отличная вещь. ну это я могу потом изменить, главное вывести эти данные правильно. как на примере организовать этот запрос я двумя запросами? пока хочу узнать как поставить суда, а потом смогу переделать как в той теме. например я зашел на страницу под id 11 и переменной $my_id присваивать эта id 11. так организовать два запроса?
но после этого пишет Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
$result = mysql_query("select friend_author as friend_id from friends where friend_address = '$my_id' union select friend_address from friends where friend_author = '$my_id'",$db);
$myrow= mysql_fetch_array($result );
do
{
echo $friend_id;
}
while($myrow= mysql_fetch_array($result ));
но после этого пишет Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
Спустя 34 минуты, 6 секунд (1.01.2010 - 21:58) sergeiss написал(а):
Так какое у тебя имя таблицы, где эти данные хранятся????????????????????
Плюс к этому, если колонки целого типа, то не надо их величины в запросе в кавычки заключать.
И еще - где ты назначаешь $my_id, чему оно равно? (код покажи)
Плюс к этому, если колонки целого типа, то не надо их величины в запросе в кавычки заключать.
И еще - где ты назначаешь $my_id, чему оно равно? (код покажи)
Спустя 30 минут, 43 секунды (1.01.2010 - 22:29) cyberx написал(а):
ну там где $my_id присваивается id код не маленький и это не имеет значения. представь что $my_id = 11; а как присваиваются это другое дело. главное с таблицы вытащить id тех которые связаны с этой переменной, в этом случае с 11. в самой первой табличке видно что с id 11 дружат (2,8,13). a sql код такой
вот такой вариант не катит:
CREATE TABLE `friends` (
`id` int(6) NOT NULL auto_increment,
`friend_author` int(6) NOT NULL,
`friend_address` int(6) NOT NULL,
PRIMARY KEY (`id`)
) ;
вот такой вариант не катит:
$my_id = 11;
$result = mysql_query("select friend_author, friend_address from friends where friend_author = '$my_id' or friend_address = '$my_id'",$db);
$myrow= mysql_fetch_array($result );
do
{
тут не знаю что написать чтоб правильно вывести данные. должно выйти (2,8,13)
}
while($myrow= mysql_fetch_array($result ));
Спустя 44 минуты, 52 секунды (1.01.2010 - 23:14) cyberx написал(а):
Решил проблему таким вопросом:
$result = mysql_query("SELECT friend_author FROM friends WHERE friend_address = '$my_id'
UNION DISTINCT
SELECT friend_address FROM friends WHERE friend_author = '$my_id'",$db) or die("error");
if (mysql_num_rows($result) > 0)
{
$myrow= mysql_fetch_array($result);
echo $myrow['friend_author'];
}
Спустя 25 минут, 24 секунды (1.01.2010 - 23:39) cyberx написал(а):
сорри забыл про цикл,
Спустя 34 минуты, 33 секунды (2.01.2010 - 00:14) sergeiss написал(а):
Цитата (cyberx @ 2.01.2010 - 00:14) |
or die("error"); |
Лучше писать
or die( mysql_error() );
информативнее будет.
Спустя 10 часов, 7 минут, 8 секунд (2.01.2010 - 10:21) ИНСИ написал(а):
cyberx но когда перенесешь сайт в интернет, я бы советовал or die( mysql_error() );
вовсе убрать.... чтобы злоумышленник не видел ошибки....
вовсе убрать.... чтобы злоумышленник не видел ошибки....

Спустя 31 минута, 44 секунды (2.01.2010 - 10:53) cyberx написал(а):
Хорошо спасибо за инфо! Я обратил внимание что с циклом while выходит не то что надо, a с циклом do while все правильно. Они так отличаются друг от друга. Знаю только что while пока перепроверяет а потом выводит
Спустя 2 часа, 52 минуты, 50 секунд (2.01.2010 - 13:45) sergeiss написал(а):
Цитата (cyberx @ 2.01.2010 - 11:53) |
Я обратил внимание что с циклом while выходит не то что надо, a с циклом do while все правильно. О |
Код - в студию!
Спустя 1 час, 12 минут, 28 секунд (2.01.2010 - 14:58) cyberx написал(а):
Вот sql код
В базе появится так
id friend_author friend_address
42 ----- 2 ------------- 13
41 ----- 2 ------------- 11
43 ----- 8 ------------- 11
44 ----- 11-------------13
вот запрос с do while
вот результат запроса (2,8,13) что и должны быть.
А вот с while
вот результат запроса (8,13) А это уже ни то. Может я что то ни то пишу?
CREATE TABLE `friends` (
`id` int(6) NOT NULL auto_increment,
`friend_author` varchar(15) NOT NULL,
`friend_address` varchar(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=45 ;
INSERT INTO `friends` VALUES (42, '2', '13');
INSERT INTO `friends` VALUES (41, '2', '11');
INSERT INTO `friends` VALUES (43, '8', '11');
INSERT INTO `friends` VALUES (44, '11', '13');
В базе появится так
id friend_author friend_address
42 ----- 2 ------------- 13
41 ----- 2 ------------- 11
43 ----- 8 ------------- 11
44 ----- 11-------------13
вот запрос с do while
$result = mysql_query("SELECT friend_author FROM friends WHERE friend_address = 11
UNION DISTINCT
SELECT friend_address FROM friends WHERE friend_author = 11",$db) or die(mysql_error());
if (mysql_num_rows($result) > 0)
{
$myrow= mysql_fetch_array($result);
do
{
echo $myrow['friend_author'];
}
while($myrow= mysql_fetch_array($result));
}
вот результат запроса (2,8,13) что и должны быть.
А вот с while
$result = mysql_query("SELECT friend_author FROM friends WHERE friend_address = 11
UNION DISTINCT
SELECT friend_address FROM friends WHERE friend_author = 11",$db) or die(mysql_error());
if (mysql_num_rows($result) > 0)
{
$myrow= mysql_fetch_array($result);
while($myrow= mysql_fetch_array($result))
{
echo $myrow['friend_author'];
}
}
вот результат запроса (8,13) А это уже ни то. Может я что то ни то пишу?
Спустя 3 минуты, 30 секунд (2.01.2010 - 15:01) sergeiss написал(а):
Цитата (cyberx @ 2.01.2010 - 15:58) |
if (mysql_num_rows($result) > 0) { $myrow= mysql_fetch_array($result); while($myrow= mysql_fetch_array($result)) { echo $myrow['friend_author']; } } |
А на кой <вырезано цензурой>
