Например есть записи в таблице:
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];
}
$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 ура
То все три записи будут выведены.
Ну да ладно.
Если будет такой вариант
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 написал(а):

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

Спустя 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
БД:
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

Спустя 34 минуты, 15 секунд (25.12.2008 - 13:09) Alchemist написал(а):
если я правильно понял последний вопрос, то результат будет не
1 2
4 1
а
1 2
1 3
2 1
4 1
или я чего-то не понял ?
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, не повторялся
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 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`
А вот мой вариант с вложением.
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 написал(а):
нет, это очевидно 
GROUP BY `par2` - почему?
Может быть
2 7
5 7
а у тебя оно сгруппирует.
`par1` NOT IN (SELECT `par2`FROM `testtable`) - почему?
тут без комментов...
т.е. выбор уникальных `par2`, и `par1` где `par1` не присутствует в `par2`... где логика?
Не веришь - проверяй свой запрос..

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
а от этого не легче.
Ну только может быть не
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 написал(а):
Ну, ребят, вы даете ! 
Для получения уникальной пары из двух чисел ИМХО очевидным решением является сортировка этих чисел внутри пары, с последующей группировкой по паре.
Однако, это решение хоть и очевидное, но тем не менее - не тривиальное, поэтому я бы предложил автору просветить нас немного нсчет целей данного упражнения, ибо мое альтер-эго подсказывает мне, что могут существовать более простые способы её достижения.

Для получения уникальной пары из двух чисел ИМХО очевидным решением является сортировка этих чисел внутри пары, с последующей группировкой по паре.
Однако, это решение хоть и очевидное, но тем не менее - не тривиальное, поэтому я бы предложил автору просветить нас немного нсчет целей данного упражнения, ибо мое альтер-эго подсказывает мне, что могут существовать более простые способы её достижения.
Спустя 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` |
ЗЫ: пока писал, придумался еще один еще проще

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) Сеня написал(а):
Что мы имеем:
Например вот таблица;

Первый запрос:
Например вот таблица;

Первый запрос:
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` |
Результат:

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

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

Как видишь par2 после всех трёх запросов повторяется.
Да и вот sql таблицы, если нужно проверить: Скачать файл test_table_sql.txt
Спустя 7 часов, 10 минут, 40 секунд (27.12.2008 - 17:02) Alchemist написал(а):
при чем тут повторяющийся par2 ?
насколько я понял стояла задача сделать выборку так чтобы каждая пара {par1, 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 не повторялся в своём столбце тоже.
Хотя я не особо представляю зачем это может понадобиться.
Я обычно не избирательно читаю, я просто уже раза три перечитавал весь топик,
пытаясь понять автора, поэтому там выше когда ещё не был зарегистрирован, пытался написать запрос на то что бы были уникальными поля par1 и par2 одновременно. Sylex меня поправил. А сейчас мне уже просто не хватило терпения дочитать )
Да походу каждый решал свою задачу.
И всё же кто нибудь может написать запрос с условием уникальности par1 par2 и их обоих.
Т.е. что бы не повторялся par1 в своём столбце и его небыло в столбце par2. И что бы par2 не повторялся в своём столбце тоже.
Хотя я не особо представляю зачем это может понадобиться.
Спустя 14 часов, 31 минута, 25 секунд (28.12.2008 - 08:51) Sylex написал(а):
бред вообще, не пишем ничо больше, пока ТС не сформулирует нормально задачу
_____________
Мой Twitter
Подписывайтесь :)