|
|
|
| Всем привет, голова кипит, неправильно выводит.
Есть таблица с текстовым полем (mypole), в котором цифровые значения (от 2 до 5).
Есть поле, в котором хранится id пользователя. Т.е. одному пользователю могут принадлежать любое количество значений от 2 до 5.
Нужно вывести id записей, если mypole равно 3, но не равно 2. Если у пользователя есть и 2, и 3 - то выводить ничего не нужно, нужно только тогда, когда у него среди всех значений есть 3ки.
Пробовал для 2: !=, NOT LIKE, <>
Как вывести записи, в которых mypole равно 3, но не равно 2 | |
|
|
|
|
|
|
|
для: grafen
(05.02.2011 в 23:24)
| | А в каком формате цифровые значения (от 2 до 5) представлены в поле mypole? Их там несколько? | |
|
|
|
|
|
|
|
для: cheops
(05.02.2011 в 23:26)
| | В поле хранится одно значение.
id | user | mypole
1 | 34 | 3
2 | 22 | 4
3 | 4 | 3
4 | 34 | 2
5 | 34 | 3
6 | 5 | 3
7 | 5 | 3
У меня идёт перебор по пользователям: 34, 22, 4,5
Делается запрос с id пользователя и нужно указать условие, что равно 3, но не равно 2.
Исходя из примера, который выше, пользователя под номером 34 - выводить не надо, т.к. у него есть 2. А вот пользователей 4 и 5 - нужно вывести. 22 - не подходит по условию, поэтому его не надо. | |
|
|
|
|
|
|
|
для: grafen
(05.02.2011 в 23:35)
| | Хм... т.е. в mypole одна цифра? Тогда не понятно в чем сложность ведь можно указать, что поле равно 3 в WHERE-условии
SELECT id FROM tbl
WHERE mypole = 3;
|
Или здесь дело в другом? | |
|
|
|
|
|
|
|
для: cheops
(05.02.2011 в 23:42)
| | Это помогло бы, если бы запись с пользователем была одна и там какое-то значение. А так как у пользователя может быть много значений, то условие не подходит. Мне нужно вывести пользователя (id) только тогда, когда среди его значений в mypole есть 3, но нет 2.
Ваш пример, выведет и пользователя 34, но у него среди значений есть 2, а это значит, что выводить не надо эту запись.
Я мучаюсь с тем, что у меня выводятся лишние записи, у которых есть 3, но также есть и 2... | |
|
|
|
|
|
|
|
для: grafen
(05.02.2011 в 23:48)
| | Ясно, можно поступить следующим образом
SELECT user FROM tbl
WHERE user IN (SELECT user FROM tbl
WHERE mypole = 3
GROUP BY user) AND
user NOT IN (SELECT user FROM tbl
WHERE mypole = 2
GROUP BY user)
GROUP BY user
ORDER BY user
|
| |
|
|
|
|
|
|
|
для: cheops
(06.02.2011 в 00:13)
| | Ух, спасибо, но выводит все id пользователей.
Я нашел другой способ, через массивы.
Есть два массива, в одном id, где встречается 2 (т.е. если есть хоть одна 2, то id попадает в массив) и второй массив, в котором выводим все id, где есть 2 и 3. После этого, применяем array_diff и у меня остаются id, где есть 3, но нет 2. Но боюсь, что могут быть какие-то косяки в подсчетах, хотя сейчас - всё чётко. | |
|
|
|
|
|
|
|
для: grafen
(06.02.2011 в 00:36)
| | >Ух, спасибо, но выводит все id пользователей.
Хм... а у меня только три: 2, 5 и 7. | |
|
|
|
|
|
|
|
для: cheops
(06.02.2011 в 11:21)
| | :) 2 и 5 - не должны выводиться.. | |
|
|
|
|
|
|
|
для: grafen
(08.02.2011 в 13:26)
| | Попробуйте следующий запрос
SELECT id, user FROM tbl
WHERE user IN (SELECT user FROM tbl
WHERE mypole = 3) AND
user NOT IN (SELECT user FROM tbl
WHERE mypole = 2)
|
| |
|
|
|