Задавайте вопросы, мы ответим
Вы не зашли.
данные таблицы favorit:
id_user1 id_user2
строка 1 307 291
строка 2 291 307
есть два запроса, которые работают правильно, первый выводит одно значение по строке 1, второй по строке 2
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user1 and favorit.id_user2 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user2 and favorit.id_user1 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
нужно сделать третий запрос, который объеденит две строки и выведет одно значение, т.е. id_user1 = 307 and id_user2 = 307 and id_user1 = 291 and id_user2 = 291
я пытался написать так
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user2 and favorit.id_user1 = '$myrow[id]' and users.id = favorit.id_user1 and favorit.id_user2 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
ничего не выходит, помогите правильно написать
Неактивен
А что значит "ничего не выходит"? Ошибку запрос возвращает или что?
>нужно сделать третий запрос, который объеденит две строки и выведет одно значение, т.е. id_user1 = 307 and id_user2 = >307 and id_user1 = 291 and id_user2 = 291
Так у Вас же нет таких строк в таблице.
Неактивен
deadka написал:
Так у Вас же нет таких строк в таблице.
каких таких? прочитайте внимательнне, может вы не поняли суть вопроса. может я не правильно его задал
я тоже не пойму почему не получаеться, как бы должно
вот этот запрос должен выводить одно значение, исходя из данных таблицы, а не выводит ничего
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user2 and favorit.id_user1 = '$myrow[id]' and users.id = favorit.id_user1 and favorit.id_user2 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
где users.id = 307 и $myrow[id] = 291
данные таблицы favorit:
id_user1 id_user2
строка 1 307 291
строка 2 291 307
я не умею такие запросы писать, нужно короче не по одной строчке выбрать, а по двум, если есть такое совпадение в таблице как сейчас... и вывести одно значение из тыблицы users
попробую другими словами, т.е. нужно вытащить одного пользователя из таблицы users, где есть совпадения по двум строчкам как в таблице favorit
Неактивен
serj011 написал:
данные таблицы favorit:
id_user1 id_user2
строка 1 307 291
строка 2 291 307
нужно сделать третий запрос, который объеденит две строки и выведет одно значение, т.е. id_user1 = 307 and id_user2 = 307 and id_user1 = 291 and id_user2 = 291
Как Вы себе представляете одновременное выполнение этих условий (которые я выделил жирным)? id_user1 не может быть одновременно равен 307 и 291 в одной строке, не так ли? Или напишите четче, чего Вы хотите.
Неактивен
deadka написал:
Как Вы себе представляете одновременное выполнение этих условий (которые я выделил жирным)? id_user1 не может быть одновременно равен 307 и 291 в одной строке, не так ли? Или напишите четче, чего Вы хотите.
одновременно конечно не может... но я уже сделал акцент на это несколько раз, нужно выбрать не по одной строчке, а по двум сразу, я правда не знаю можно ли это сделать вообще... и как...
Т.Е.
users.id (307) = favorit.id_user2 (307) and favorit.id_user1 (291) = '$myrow[id]' (291) [СТРОКА № 2]
AND
and users.id (307) = favorit.id_user1 (307) and favorit.id_user2 (291) = '$myrow[id]' (291) [СТРОКА № 1]
нужно найти совпадения по ДВУМ строкам из таблицы favorit и вытащить одного пользователя из таблицы user
где users.id = 307 и $myrow[id] = 291
данные таблицы favorit:
id_user1 id_user2
строка 1 307 291
строка 2 291 307
Неактивен
А если сделать union двух Ваших работающих запросов (из первого поста в топике)
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user1 and favorit.id_user2 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
$result_my_favorit = mysql_query("SELECT favorit.*,users.id,nik,gender,avatar,gender,city FROM users,favorit WHERE users.id = favorit.id_user2 and favorit.id_user1 = '$myrow[id]' ORDER BY favorit.id DESC",$db);
и сгруппировать результат по users.id - такой результат Вам нужен?
Неактивен
я догадываюсь что тут без union , GROUP BY не обойтись, я пытался сделать, но не знаю как правильно, подскажите если знаете, как его правильно составить?
Неактивен
Ну вообще, если бы Вы приложили дампы своих табличек favorite и users было бы проще .
Навскидку как-то так (простейший вариант):
Отредактированно deadka (10.12.2011 02:36:25)
Неактивен
что такое дампы?
что не так в этом запросе, выводит все подряд, т.е. выводит и то что в первом и то что во втором запросе
Неактивен
дамп - это инструкции для создания таблиц в форме (create table t...) и сами данные в форме insert into ... values...()...
что не так в этом запросе, выводит все подряд, т.е. выводит и то что в первом и то что во втором запросе
Так мы вроде этого и добивались, разве нет? Какой результат выводится и какой результат Вы хотели бы получить (если исходить из последней версии моего запроса, где выбирается только users.id)?
Неактивен
короче... если не тяжело, vdonbasse.com.ua логин serj011@yandex.ru пароль 123456 "знакомства и общение" "симпатии" выводятся те пользователи, которые меня добавили в симпатии и которых я добавил в разных окнах (запросах), хочу сделать еще одну вкладку "взаимные симпатии", где будут выбираться только те, которые есть и там и там...
Неактивен
Боюсь, что если Вы не будете прямо отвечать на мои вопросы, то мне как-то затруднительно будет подсказывать .
Давайте на конкретных данных. таблицы, строки в них, соответствующие запросы. Приведите наконец дампы таблиц и опять же:
SELECT users.id FROM users,favorit WHERE users.id = favorit.id_user1 and favorit.id_user2 = '$myrow[id]'
union
(SELECT users.id FROM users,favorit WHERE users.id = favorit.id_user2 and favorit.id_user1 = '$myrow[id]')
какой результат возвращает запрос?, чем он Вас не устраивает?, какой результат Вы хотите получить?
Неактивен
я уже не знаю как мне еще объяснить...
этот запрос плюсут первый и второй мои запросы и выводит все строки из таблицы user, а должен вывести только одну строку с user.id где две строки пересекаються как тут
id_user1 id_user2
строка 1 307 291
строка 2 291 307
Неактивен
где мне взять эти дампы? я не мойму???
Неактивен
это код который вставляет данные в таблицу favorit
$result = mysql_query ("INSERT INTO favorit (id_user1,id_user2,text) VALUES ('$id_user1','$id_user2','$text')");
Неактивен
Чтобы сделать дамп, нужно войти в базу через phpmyadmin или другой доступный Вам клиент mysql. если есть доступ по ssh на сервер, то там обычно есть программа mysqldump, ей также дамп снимается.
Неактивен
вообщем deadka спасибо за попытки помочь, но я уже не знаю как объяснять лучьше чем в 5 посте, попробую еще сам поразбираться...
Неактивен
Отписал на почту.
Неактивен
id фаворитов на пользователя с id=1:
select id_user2 from t_5064_favorite where id_user1=1 and id_user2 in (select id_user1 from t_5064_favorite where id_user2=1);
выборка из таблицы пользователей:
select * from t_5064_user where id in (select id_user1 from t_5064_favorite where id_user2=1) and id in (select id_user2 from t_5064_favorite where id_user1=1);
См. ниже
mysql> set names 'utf8'; Query OK, 0 rows affected (0.00 sec) mysql> drop table if exists t_5064_user; Query OK, 0 rows affected (0.00 sec) mysql> drop table if exists t_5064_favorite; create table t_5064_favorite(id_user1 integer,id_user2 integer); Query OK, 0 rows affected (0.00 sec) mysql> create table t_5064_user(id integer,name varchar(80)); Query OK, 0 rows affected (0.00 sec) mysql> create table t_5064_favorite(id_user1 integer,id_user2 integer); Query OK, 0 rows affected (0.00 sec) mysql> insert into t_5064_user values(1,'Вася'),(2,'Коля'),(3,'Ваня'),(4,'Петя'),(5,'Витя'); Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> insert into t_5064_favorite values(1,2),(2,1),(1,3),(1,4),(1,5),(5,1); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> mysql> select id_user2 from t_5064_favorite where id_user1=1 and id_user2 in (select id_user1 from t_5064_favorite where id_user2=1); +----------+ | id_user2 | +----------+ | 2 | | 5 | +----------+ 2 rows in set (0.00 sec) mysql> select * from t_5064_user where id in (select id_user1 from t_5064_favorite where id_user2=1) and id in (select id_user2 from t_5064_favorite where id_user1=1); +------+----------+ | id | name | +------+----------+ | 2 | Коля | | 5 | Витя | +------+----------+ 2 rows in set (0.00 sec)
Неактивен
deadka, простите за тупость, но я не могу понять какой запрос из двух написанных вами нужно использовать, или их нужно объединять?
Неактивен
Объединять их, конечно, не нужно.
Использовать - хмм, ну смотря что Вы хотите получить.
Если исходить из первоначальной постановки вопроса, то наверное как-то так Вы подразумевали (выбираем все данные тех пользователей, у которых "взаимное фаворитство" с пользователем, у которого id=$myrow['id']):
Отредактированно deadka (11.12.2011 02:40:47)
Неактивен
Спасибо огромное deadka, все работает я бы не когда не мог подумать, что такая вроде не сложная задача, может оказаться таким сложным запросом, для меня
Неактивен