id fild1
1 5
1 6
1 4
1 2
2 4
2 5
2 6
3 5
4 6
5 2
6 5
нужно выбрать ID у которых fild1 равно и 5 и 6
после выполнения запроса должно получиться:
1
2
голову сломал но сделать не могу, прошу помощи
Спустя 2 минуты, 15 секунд (15.05.2011 - 20:39) sharki написал(а):
mavrrr
Показывай свой вариант
Показывай свой вариант
Спустя 19 минут, 38 секунд (15.05.2011 - 20:59) Winston написал(а):
mavrrr
Учи SQL. У меня в подписи по ссылочке пройди.
Учи SQL. У меня в подписи по ссылочке пройди.
Цитата (mavrrr @ 15.05.2011 - 19:37) |
голову сломал но сделать не могу, прошу помощи |
Мне кажется там нужно что-то с чем-то сравнить чтобы получить нужное.
И как id может быть одинаковой Ведь для того оно и ID чтобы быть уникальным
Спустя 3 минуты, 6 секунд (15.05.2011 - 21:02) alex12060 написал(а):
Прочитай про DISTINCT (DISTINCTROW), про IN и LIMIT и попробуй сделать сам.
Спустя 2 минуты, 13 секунд (15.05.2011 - 21:04) sharki написал(а):
alex12060
Зачем подсказал) Теперь он вообще не будет ничего искать, и пробовать, если вообще пробовал) А так если бы он показал, то помогли бы)
Зачем подсказал) Теперь он вообще не будет ничего искать, и пробовать, если вообще пробовал) А так если бы он показал, то помогли бы)
Спустя 2 минуты, 55 секунд (15.05.2011 - 21:07) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 18:02) |
Прочитай про DISTINCT (DISTINCTROW), про IN и LIMIT и попробуй сделать сам. |
с IN я пробовал, не то.. с LIMIT конечно тоже ничего не получится... сейчас DISTINCT попробую... на счет уникальности ID, ID в некоторых случаях может быть не уникальным, например в моем..
Спустя 1 минута, 15 секунд (15.05.2011 - 21:08) mavrrr написал(а):
Цитата (sharki @ 15.05.2011 - 18:04) |
alex12060 Зачем подсказал) Теперь он вообще не будет ничего искать, и пробовать, если вообще пробовал) А так если бы он показал, то помогли бы) |
откуда такие выводы не пойму
Спустя 1 минута, 5 секунд (15.05.2011 - 21:09) sharki написал(а):
mavrrr
Если это не так, то извини, просто ОЧЕНЬ часто просят написать за них, под такими вопросами.
Если это не так, то извини, просто ОЧЕНЬ часто просят написать за них, под такими вопросами.
Спустя 40 секунд (15.05.2011 - 21:10) alex12060 написал(а):
mavrrr
Цитата |
alex12060 Зачем подсказал) Теперь он вообще не будет ничего искать, и пробовать, если вообще пробовал) А так если бы он показал, то помогли бы) |
Это давно пройденная практика. Так всегда было, есть и будет.
sharki
Да, надо было подождать, ну что-ж поделать, помогу уж)
Спустя 2 минуты, 31 секунда (15.05.2011 - 21:13) Winston написал(а):
Цитата (mavrrr @ 15.05.2011 - 20:07) |
с IN я пробовал, не то.. с LIMIT |
Зачем это? Там только сравнить, и вывести уникальные
Спустя 1 минута, 3 секунды (15.05.2011 - 21:14) mavrrr написал(а):
distinct к сожалению тоже мало чем поможет
Спустя 1 минута, 56 секунд (15.05.2011 - 21:16) Winston написал(а):
Покажи как пробуешь
Спустя 2 минуты, 24 секунды (15.05.2011 - 21:18) mavrrr написал(а):
Цитата (PHPprogramer @ 15.05.2011 - 18:13) | ||
Зачем это? Там только сравнить, и вывести уникальные |
дело не в уникальности, а в том что нужно выбрать элементы у которых field1 равно одновременно и 5 и 6
Спустя 1 минута (15.05.2011 - 21:19) Winston написал(а):
Цитата (mavrrr @ 15.05.2011 - 19:37) |
голову сломал но сделать не могу |
А ты что-то пробовал ?
Цитата (PHPprogramer @ 15.05.2011 - 20:16) |
Покажи как пробуешь |
Спустя 4 минуты, 51 секунда (15.05.2011 - 21:24) mavrrr написал(а):
Цитата (PHPprogramer @ 15.05.2011 - 18:16) |
Покажи как пробуешь |
я не могу придумать запрос
если мы сделаем так:
select * from table where field in (5,6)
то я получу id у которых id=5 или id=6, в нашем случаи это:
1
1
2
2
3
4
6
а мне нужно условие id=5 и id=6
Спустя 1 минута, 48 секунд (15.05.2011 - 21:26) alex12060 написал(а):
Я состряпал запрос. Сделал таблицу. Все вывелось правильно по твоему вопросу:
нужно выбрать ID у которых fild1 равно и 5 и 6
Итог, он выбрал это:
id fild1
1 5
1 6
1 4
1 2
2 4
2 5
2 6
3 5
4 6
5 2
6 5
Но как ты хочешь получить только первые 2? Я не понимаю...
нужно выбрать ID у которых fild1 равно и 5 и 6
Итог, он выбрал это:
id fild1
1 5
1 6
1 4
1 2
2 4
2 5
2 6
3 5
4 6
5 2
6 5
Но как ты хочешь получить только первые 2? Я не понимаю...
Спустя 2 минуты, 48 секунд (15.05.2011 - 21:28) Winston написал(а):
Тебе нужно выбрать уникальные значения
Спустя 1 минута, 54 секунды (15.05.2011 - 21:30) sharki написал(а):
SELECT DISTINCT *
FROM `table`
WHERE `field` =5
AND `field` = 6
А так?
Спустя 30 секунд (15.05.2011 - 21:31) alex12060 написал(а):
В общем, вывода, который ожидает ТС я добился. Но условие и результат у него как небо и земля.
Спустя 1 минута, 49 секунд (15.05.2011 - 21:33) sharki написал(а):
Что-то я щас вчитываюсь, и понимаю что это бред О_О
Это надо получить все данные, а потом пройтись циклом по полученным данным, и если field >= 2 то забрать значение, если нет то пропустить итерацию
Это надо получить все данные, а потом пройтись циклом по полученным данным, и если field >= 2 то забрать значение, если нет то пропустить итерацию
Спустя 1 минута, 2 секунды (15.05.2011 - 21:34) inpost написал(а):
SELECT *
FROM `table`
WHERE `id` = (
SELECT `id`
FROM `table`
WHERE `field` = 6
) AND `field` = 5
Что-то вроде этого.
Спустя 21 секунда (15.05.2011 - 21:34) alex12060 написал(а):
SELECT `id` , `fild1`
FROM `t`
WHERE `fild1`
IN ( 5, 6 )
AND `id` = 1
Спустя 6 минут, 2 секунды (15.05.2011 - 21:40) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 18:26) |
Я состряпал запрос. Сделал таблицу. Все вывелось правильно по твоему вопросу: нужно выбрать ID у которых fild1 равно и 5 и 6 Итог, он выбрал это: id fild1 1 5 1 6 1 4 1 2 2 4 2 5 2 6 3 5 4 6 5 2 6 5 Но как ты хочешь получить только первые 2? Я не понимаю... |
ты не понял логику, я хочу выбрать id которые одновременно принадлежать 5 и 6, чтобы было понятнее я придумаю образ, в библиотеке есть книги под номерами ID (1,2,3,4,5,6), у каждой книги есть свойства field (1-старая, 2-испорченная, 3-тонкая, 4-толстая, 5-новая, 6-детская, 7-взрослая).. декан поставил задачу выбрать новые детские книги.. только новые ему не нужны! и только детские ему не нужны! ему нужны толстые детские книги!
Спустя 1 минута, 6 секунд (15.05.2011 - 21:41) sharki написал(а):
mavrrr
Ну так у тебя тогда структура БД неправильная в итоге.
Ну так у тебя тогда структура БД неправильная в итоге.
Спустя 3 секунды (15.05.2011 - 21:41) inpost написал(а):
Может в моём примере надо id IN ставить, либо отдельно через 2 запроса, а не через один.
В первом взять с `field` = 5, во втором с `field` = 6
В первом взять с `field` = 5, во втором с `field` = 6
Спустя 1 минута, 47 секунд (15.05.2011 - 21:43) alex12060 написал(а):
id fild1
1 5
1 6
1 4
1 2
2 4
2 5
2 6
3 5
4 6
5 2
6 5
Такой должен быть тогда результат.
1 5
1 6
1 4
1 2
2 4
2 5
2 6
3 5
4 6
5 2
6 5
Такой должен быть тогда результат.
Спустя 46 секунд (15.05.2011 - 21:44) mavrrr написал(а):
Цитата (inpost @ 15.05.2011 - 18:41) |
Может в моём примере надо id IN ставить, либо отдельно через 2 запроса, а не через один. В первом взять с `field` = 5, во втором с `field` = 6 |
да скорее всего тут нужно в 2 запроса.. но как, не знаю, на oracle я бы решил все через триггеры или вью, в mysql такого нет
Спустя 1 минута, 30 секунд (15.05.2011 - 21:45) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 18:43) |
id fild1 1 5 1 6 1 4 1 2 2 4 2 5 2 6 3 5 4 6 5 2 6 5 Такой должен быть тогда результат. |
да такой бы меня устроил
Спустя 13 минут, 40 секунд (15.05.2011 - 21:59) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 18:56) |
#POST# t=45113<br />Я ужэ сонный, но тут вот работает. Не знаю, полюбому есть вариант оптимальней...
|
ты подумай сам что ты пишешь, я не знаю про ID 1 и 2, я знаю только про FILD 5,6. и хочу в итоге получить ID 1 и 2 - как я могу использовать это в запросе?
Спустя 2 минуты, 35 секунд (15.05.2011 - 22:02) alex12060 написал(а):
SELECT `id` , `fild1`
FROM `t`
WHERE `fild1`
IN ( 5, 6 )
AND id = (
SELECT @next := id
FROM t
WHERE id >0
ORDER BY id ASC
LIMIT 0 , 1 )
Спустя 8 минут, 18 секунд (15.05.2011 - 22:10) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 19:02) |
SELECT `id` , `fild1` |
не пойму логику
Спустя 2 минуты, 15 секунд (15.05.2011 - 22:12) alex12060 написал(а):
Выбираем значения, где fild1 имеет только 5 и 6, и где id равен следующему после него id
Спустя 5 минут, 7 секунд (15.05.2011 - 22:17) mavrrr написал(а):
Цитата (alex12060 @ 15.05.2011 - 19:12) |
Выбираем значения, где fild1 имеет только 5 и 6, и где id равен следующему после него id |
а почему именно следующему? в моей таблице чуть больше 50тысяч элементов, и все они разные, мала вероятность что они будут следующими
Спустя 4 минуты, 41 секунда (15.05.2011 - 22:22) alex12060 написал(а):
Он выбрал, допустим, это:
1 5
2 6
1 5
1 6
3 5
2 6
5 5
5 6
4 5
4 6
1 5
2 6
В итоге, по условию, должно выбраться:
1 5
1 6
5 5
5 6
4 5
4 6
Но я вижу, что мой запрос пока не алле. Ладно, я спать пожалуй. Завтра еще подумаю.
1 5
2 6
1 5
1 6
3 5
2 6
5 5
5 6
4 5
4 6
1 5
2 6
В итоге, по условию, должно выбраться:
1 5
1 6
5 5
5 6
4 5
4 6
Но я вижу, что мой запрос пока не алле. Ладно, я спать пожалуй. Завтра еще подумаю.
Спустя 2 минуты, 4 секунды (15.05.2011 - 22:24) mavrrr написал(а):
короче сам вроде допер, получилось вот так:
select DISTINCT id from t where id in (select id from t where field=5) and id in (select id from t where field=6)
не уверен что это правильное решение, будет работать не быстро...
select DISTINCT id from t where id in (select id from t where field=5) and id in (select id from t where field=6)
не уверен что это правильное решение, будет работать не быстро...
Спустя 4 минуты, 29 секунд (15.05.2011 - 22:28) mavrrr написал(а):
сейчас проверил на больших данных работает правильно, но с учетом того что этот запрос сам является подзапросом, то все явно не летает... есть у кого-нибудь мысли как это оптимизировать? может в mysql есть какие-нибудь механизмы для этого?
Спустя 19 минут, 1 секунда (15.05.2011 - 22:47) inpost написал(а):
mavrrr
Второй подзапрос лишний, там достаточно AND `field` = 6 , как я писал ранее.
Второй подзапрос лишний, там достаточно AND `field` = 6 , как я писал ранее.
Спустя 28 минут, 26 секунд (15.05.2011 - 23:16) mavrrr написал(а):
Цитата (inpost @ 15.05.2011 - 19:47) |
mavrrr Второй подзапрос лишний, там достаточно AND `field` = 6 , как я писал ранее. |
да согласен, так будет оптимальнее, жаль что из-за флуда не внимательно прочитал твой запрос, тема закрылась гораздо бы быстрее, всем спасибо!