Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Условие, если не равно и равно
 
 автор: grafen   (05.02.2011 в 23:24)   письмо автору
 
 

Всем привет, голова кипит, неправильно выводит.

Есть таблица с текстовым полем (mypole), в котором цифровые значения (от 2 до 5).
Есть поле, в котором хранится id пользователя. Т.е. одному пользователю могут принадлежать любое количество значений от 2 до 5.
Нужно вывести id записей, если mypole равно 3, но не равно 2. Если у пользователя есть и 2, и 3 - то выводить ничего не нужно, нужно только тогда, когда у него среди всех значений есть 3ки.

Пробовал для 2: !=, NOT LIKE, <>

Как вывести записи, в которых mypole равно 3, но не равно 2

  Ответить  
 
 автор: cheops   (05.02.2011 в 23:26)   письмо автору
 
   для: grafen   (05.02.2011 в 23:24)
 

А в каком формате цифровые значения (от 2 до 5) представлены в поле mypole? Их там несколько?

  Ответить  
 
 автор: grafen   (05.02.2011 в 23:35)   письмо автору
 
   для: 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 - не подходит по условию, поэтому его не надо.

  Ответить  
 
 автор: cheops   (05.02.2011 в 23:42)   письмо автору
 
   для: grafen   (05.02.2011 в 23:35)
 

Хм... т.е. в mypole одна цифра? Тогда не понятно в чем сложность ведь можно указать, что поле равно 3 в WHERE-условии
SELECT id FROM tbl
WHERE mypole = 3;

Или здесь дело в другом?

  Ответить  
 
 автор: grafen   (05.02.2011 в 23:48)   письмо автору
 
   для: cheops   (05.02.2011 в 23:42)
 

Это помогло бы, если бы запись с пользователем была одна и там какое-то значение. А так как у пользователя может быть много значений, то условие не подходит. Мне нужно вывести пользователя (id) только тогда, когда среди его значений в mypole есть 3, но нет 2.

Ваш пример, выведет и пользователя 34, но у него среди значений есть 2, а это значит, что выводить не надо эту запись.

Я мучаюсь с тем, что у меня выводятся лишние записи, у которых есть 3, но также есть и 2...

  Ответить  
 
 автор: cheops   (06.02.2011 в 00:13)   письмо автору
 
   для: 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

  Ответить  
 
 автор: grafen   (06.02.2011 в 00:36)   письмо автору
 
   для: cheops   (06.02.2011 в 00:13)
 

Ух, спасибо, но выводит все id пользователей.

Я нашел другой способ, через массивы.
Есть два массива, в одном id, где встречается 2 (т.е. если есть хоть одна 2, то id попадает в массив) и второй массив, в котором выводим все id, где есть 2 и 3. После этого, применяем array_diff и у меня остаются id, где есть 3, но нет 2. Но боюсь, что могут быть какие-то косяки в подсчетах, хотя сейчас - всё чётко.

  Ответить  
 
 автор: cheops   (06.02.2011 в 11:21)   письмо автору
 
   для: grafen   (06.02.2011 в 00:36)
 

>Ух, спасибо, но выводит все id пользователей.
Хм... а у меня только три: 2, 5 и 7.

  Ответить  
 
 автор: grafen   (08.02.2011 в 13:26)   письмо автору
 
   для: cheops   (06.02.2011 в 11:21)
 

:) 2 и 5 - не должны выводиться..

  Ответить  
 
 автор: cheops   (08.02.2011 в 13:41)   письмо автору
 
   для: 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)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования