Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, нужно сделать сложный запрос с одной таблице если это реально. Дело в том что это нужно сделать одним запросом.
Нужно сделать выборку из таблицы `Friends` если есть такое то условие и в этой же таблице присутствует вторая строка с таким то условием.
Например сама таблица с данными:
id | User | Friend | Confirmed
1 | 1 | 2 | yes
1 | 2 | 1 | yes
1 | 1 | 3 | yes
1 | 3 | 1 | yes
1 | 1 | 4 | yes
1 | 4 | 1 | no
Нужно одним запросом получить следующий результат:
id | User | Friend | Confirmed
1 | 1 | 2 | yes
1 | 1 | 3 | yes
Строку:
1 | 1 | 4 | yes
не нужно так как присутствует строка:
1 | 4 | 1 | no
тоесть Confirmed = 'no'.
Большое спасибо за решение, если это возможно.
Неактивен
Неактивен
К сожалению это ничего не дало, выводит 0 строк. Это все равно если бы вы написали бы:
Вы писали:
SELECT * FROM `Friends` WHERE User=1 GROUP BY Friend HAVING sum(if(Confirmed='yes',1,0))=2;
Что будет:
SELECT * FROM `Friends` WHERE User=1 GROUP BY Friend HAVING sum(True)=2;
1 никогда не будет ровно 2;
Может вы меня не так поняли. Нужно сделать:
№1. SELECT * FROM `Friends` WHERE `User`=1 and `Confirmed`='yes';
но при втором условие, что в этой же таблице присутствует строка:
№2. SELECT * FROM `Friends` WHERE User=(значение из рядка №1 переменной Friend) and `Friend`=1 and `Confirmed`='yes';
Тоесть как бы два запроса в одном. Большое спасибо!
Отредактированно vladimirok5959 (12.04.2010 00:32:31)
Неактивен
Короче всем спасибо, немножко погуглив, через 1 час эксперементов у меня все вышло, а именно мне нужно было сделать следующее:
SELECT
*
FROM
(SELECT * FROM `Friends`) AS _query1,
(SELECT * FROM `Friends`) AS _query2
WHERE
_query1.User=_query2.Friend and
_query1.Friend=_query2.User and
_query1.Confirmed='yes' and
_query2.Confirmed='yes' and
_query1.User=1;
Просто я еще не знал что можно использовать запросы в запросах . А вообще круто делать выборку в выборке
Тему можно закрывать.
Неактивен
vladimirok5959 написал:
а именно мне нужно было сделать следующее:
SELECT
*
FROM
(SELECT * FROM `Friends`) AS _query1,
(SELECT * FROM `Friends`) AS _query2
WHERE
_query1.User=_query2.Friend and
_query1.Friend=_query2.User and
_query1.Confirmed='yes' and
_query2.Confirmed='yes' and
_query1.User=1;
Так будет короче и, возможно, быстрее:
Неактивен