[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать запрос по такой схеме?
IamSmorodin
Здравствуйте. Подскажите, как сделать запрос, при котором бы один параметр был бы константой, а второй не повтарялся бы.
Например есть записи в таблице:

id | par1 | text
1 2 ура
1 2 ура
1 3 очень ура

Мне надо сделать отбор по id=1, чтобы par1 не повторялся, т.е. чтобы количество записей в запросе было 2.
Спасибо.



Спустя 42 минуты, 41 секунда (23.12.2008 - 12:46) Adil написал(а):
Если я правильно понл, то ты хочешь, чтобы при вывода результата par1 не повторялся. Можно сделать таким вот вариантом:

$last_par = '';
while($row = mysql_fetch_assoc($result)){
if ($row['par'] != $last_par)
{
$last_par = $row['pa'];
}
print $row[text];
}

Спустя 35 секунд (23.12.2008 - 12:46) Гость написал(а):
SELECT * FROM `ura_table` WHERE `id`=1 GROUP BY `par1`

Спустя 9 минут, 48 секунд (23.12.2008 - 12:56) Гость написал(а):
И кстати Nezabivaemiy даже несмотря на то что он не нужен, - php код неверен.

Если будет такой вариант

id | par1 | text
1 2 ура
1 3 очень ура
1 2 ура

То все три записи будут выведены.
Ну да ладно.

Спустя 19 минут, 21 секунда (23.12.2008 - 13:15) Adil написал(а):
Цитата (Гость @ 23.12.2008 - 13:56)
И кстати Nezabivaemiy даже несмотря на то что он не нужен, - php код неверен.

Если будет такой вариант

id | par1 | text
1 2 ура
1 3 очень ура
1 2 ура

То все три записи будут выведены.
Ну да ладно.



ну поэтому надо в селекте сделать order by

Спустя 17 минут, 59 секунд (23.12.2008 - 13:33) Гость написал(а):
Отличная отмазка , считается ))

Спустя 50 минут, 43 секунды (23.12.2008 - 14:24) Adil написал(а):
wink.gif

Спустя 32 минуты, 54 секунды (23.12.2008 - 14:57) IamSmorodin написал(а):
Гость, спасибо. Как иногда все-таки все просто
user posted image

Спустя 1 день, 21 час, 37 минут, 28 секунд (25.12.2008 - 12:34) IamSmorodin написал(а):
А если ситуация такая:

БД:
par1 | par2 | text
1 2 ура
1 2 ура
2 1 очень ура
1 3 очень ура 1
4 1 очень ура 2

мне надо выбрать 1 в par1 и par2, чтобы парметра par 1 или par2 не повторялись, то есть из этой БД надо выбрать:

1 2
4 1

huh.gif

Спустя 34 минуты, 15 секунд (25.12.2008 - 13:09) Alchemist написал(а):
если я правильно понял последний вопрос, то результат будет не
1 2
4 1

а

1 2
1 3
2 1
4 1

или я чего-то не понял ?

Спустя 45 минут, 39 секунд (25.12.2008 - 13:54) IamSmorodin написал(а):
Alchemist, нет, именно

1 2
4 1

Надо, чтобы второй парметр, составляющий пару 1, не повторялся


Спустя 8 минут, 20 секунд (25.12.2008 - 14:03) Alchemist написал(а):
а он и не повторяется

Спустя 17 минут, 4 секунды (25.12.2008 - 14:20) IamSmorodin написал(а):
Alchemist, все-таки вы чуть-чуть не поняли меня. Мне надо, что бы не повтарялись пару... то есть нелья, чтобы было

1 2
и
2 1

Спустя 1 час, 18 минут, 46 секунд (25.12.2008 - 15:38) Sylex написал(а):
а 1 3 куда делось?

Спустя 5 часов, 26 минут, 50 секунд (25.12.2008 - 21:05) Гость написал(а):
Незнаю можно ли сделать без подзапросов, это в мануал.
А вот мой вариант с вложением.

SELECT * FROM `testtable`
WHERE `par1` NOT IN (SELECT `par2`FROM `testtable`)
GROUP BY `par2`

Спустя 24 минуты, 10 секунд (25.12.2008 - 21:29) Sylex написал(а):
Гость, твое решение очевидно неверное

Спустя 19 минут, 28 секунд (25.12.2008 - 21:49) Гость написал(а):
Sylex, объяснишь почему?

Спустя 9 часов, 48 минут, 43 секунды (26.12.2008 - 07:38) Sylex написал(а):
нет, это очевидно smile.gif

GROUP BY `par2` - почему?

Может быть
2 7
5 7

а у тебя оно сгруппирует.

`par1` NOT IN (SELECT `par2`FROM `testtable`) - почему?
тут без комментов...

т.е. выбор уникальных `par2`, и `par1` где `par1` не присутствует в `par2`... где логика?

Не веришь - проверяй свой запрос..

Спустя 1 час, 8 минут, 52 секунды (26.12.2008 - 08:46) Guest написал(а):
Да проверил, ошибка есть.

Ну только может быть не

2 7
5 7

а

7 5
7 2

а от этого не легче.

Цитата
Да остаётся только вариант выбрать с одним повторяющимся параметром
т.е. выбор уникальных `par2`, и `par1` где `par1` не присутствует в `par2`... где логика?

Так автору это и нужно, что бы не повторялись par1 и par2.

Ну да походу я вижу только один вариант, - группировать по одному параметру, а проверять уникальность другого при выводе, уже в php.


Спустя 15 минут, 8 секунд (26.12.2008 - 09:02) Sylex написал(а):
нужно чтоб не повторялась ПАРА, а не одно значение

Спустя 4 часа, 45 минут, 26 секунд (26.12.2008 - 13:47) Alchemist написал(а):
Ну, ребят, вы даете ! smile.gif

Для получения уникальной пары из двух чисел ИМХО очевидным решением является сортировка этих чисел внутри пары, с последующей группировкой по паре.

Однако, это решение хоть и очевидное, но тем не менее - не тривиальное, поэтому я бы предложил автору просветить нас немного нсчет целей данного упражнения, ибо мое альтер-эго подсказывает мне, что могут существовать более простые способы её достижения.

Спустя 6 часов, 45 минут, 33 секунды (26.12.2008 - 20:33) Гость написал(а):
Напиши сие очевидное решение.
Кроме шуток, - просто интересно.

Спустя 29 минут, 52 секунды (26.12.2008 - 21:02) Alchemist написал(а):
SQL
SELECT table.*
, IF(`par1` < `par2`,`par1`,`par2`) as `small`
, IF(`par1` < `par2`,`par2`,`par1`) as `big`
FROM `table` WHERE 1
GROUP BY `small`,`big`


или чуть более простой вариант.

SQL
SELECT table.*
, IF(`par1` < `par2`,`par1`,`par2`) as `small`
, `par1` + `par2` as `sum`
FROM `table` WHERE 1
GROUP BY `small`,`sum`


ЗЫ: пока писал, придумался еще один еще проще smile.gif

SQL
SELECT table.*
, ABS(`par1` - `par2`) as `diff`
, `par1` + `par2` as `sum`
FROM `table` WHERE 1
GROUP BY `diff`,`sum`

Спустя 12 часов, 48 минут, 42 секунды (27.12.2008 - 09:51) Сеня написал(а):
Что мы имеем:
Например вот таблица;
user posted image
Первый запрос:
SQL
SELECT `test`.*
, IF(`par1` < `par2`,`par1`,`par2`) as `small`
, IF(`par1` < `par2`,`par2`,`par1`) as `big`
FROM `test` WHERE 1
GROUP BY `small`,`big`

Результат:
user posted image
Второй запрос:
SQL
SELECT table.*
, IF(`par1` < `par2`,`par1`,`par2`) as `small`
, `par1` + `par2` as `sum`
FROM `table` WHERE 1
GROUP BY `small`,`sum`

Результат:
user posted image
Третий запрос:
SQL
SELECT table.*
, ABS(`par1` - `par2`) as `diff`
, `par1` + `par2` as `sum`
FROM `table` WHERE 1
GROUP BY `diff`,`sum`

Результат:
user posted image

Как видишь par2 после всех трёх запросов повторяется.

Да и вот sql таблицы, если нужно проверить: Скачать файл test_table_sql.txt

Спустя 7 часов, 10 минут, 40 секунд (27.12.2008 - 17:02) Alchemist написал(а):
при чем тут повторяющийся par2 ?
насколько я понял стояла задача сделать выборку так чтобы каждая пара {par1, par2} была уникальной. Именно пара, а не каждое значение внутри нее.
Эту задачу я и решал (и решил).

Спустя 35 минут, 24 секунды (27.12.2008 - 17:37) Сеня написал(а):
Цитата
А если ситуация такая:

БД:
par1 | par2 | text
1 2 ура
1 2 ура
2 1 очень ура
1 3 очень ура 1
4 1 очень ура 2

мне надо выбрать 1 в par1 и par2, чтобы парметра par 1 или par2 не повторялись, то есть из этой БД надо выбрать:

1 2
4 1


Вот что писал автор. Как он объяснил нужны не уникальные пары, а что бы параметры не повторялись, то есть что бы мы получили таблицу с уникальными значениями par1 и par2.


Да я там выше тоже пытался составить запрос немного для другой цели.

А для этого получается подойдёт:
SQL
SELECT *
FROM `test` WHERE `id`
IN (
SELECT `id`
FROM `test` GROUP BY `par2`
)
GROUP BY `par1`

Спустя 30 минут, 19 секунд (27.12.2008 - 18:08) Alchemist написал(а):
Сеня, во-первых, ваш запрос мягко говоря не оптимален по ряду причин, которые мне сейчас лень перечислять (может позже)

Во-вторых, вы очень избирательно читаете. Автор также писал:
Цитата (IamSmorodin @ 25.12.2008 - 13:20)
Alchemist, все-таки вы чуть-чуть не поняли меня. Мне надо, что бы не повтарялись пару... то есть нелья, чтобы было

1 2
и
2 1

а у вас это безусловно будет.

В-третьих, (и тут безусловно вина автора), фразу "чтобы парметра par 1 или par2 не повторялись" можно понять кучей разных способов, одним из которых будет - "чтобы были уникальные пары чисел".

Спустя 12 минут, 19 секунд (27.12.2008 - 18:20) Сеня написал(а):
Я полностью согласен.

Я обычно не избирательно читаю, я просто уже раза три перечитавал весь топик,
пытаясь понять автора, поэтому там выше когда ещё не был зарегистрирован, пытался написать запрос на то что бы были уникальными поля par1 и par2 одновременно. Sylex меня поправил. А сейчас мне уже просто не хватило терпения дочитать )

Да походу каждый решал свою задачу.
И всё же кто нибудь может написать запрос с условием уникальности par1 par2 и их обоих.
Т.е. что бы не повторялся par1 в своём столбце и его небыло в столбце par2. И что бы par2 не повторялся в своём столбце тоже.

Хотя я не особо представляю зачем это может понадобиться.



Спустя 14 часов, 31 минута, 25 секунд (28.12.2008 - 08:51) Sylex написал(а):
бред вообще, не пишем ничо больше, пока ТС не сформулирует нормально задачу


_____________
Мой Twitter
Подписывайтесь :)
Быстрый ответ:

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