[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с запросом
cyberx
Помогите сделать правильный запрос. Сделал добавление друзей на сайте и в базу так заносится:

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

Спустя 19 минут, 9 секунд (1.01.2010 - 20:16) cyberx написал(а):
ну я сделал такой запрос:


$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 в один запрос:
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 при выборке данных из БД!!!

А во-вторых, какие именно ошибки? Я же ведь указал "абстрактное" имя таблицы, т.к. ты не указал реальное smile.gif Укажи имя именно своей таблицы.


Спустя 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. так организовать два запроса?


$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, чему оно равно? (код покажи)

Спустя 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() );
вовсе убрать.... чтобы злоумышленник не видел ошибки.... smile.gif

Спустя 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 код

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'];
}
}

А на кой <вырезано цензурой> wink.gif у тебя mysql_fetch_array стоит ПЕРЕД циклом while??? Вот тут и ошибка: ты просто "тупо" пропускаешь первую строку. Убери эту строку и всё будет ОК.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.