MySQL Select deyimi, WHERE 'IN' Clause

4 Cevap php

Şu anda benim tablosunda aşağıdaki satır var:

         course_data:
             user_id        days     <-- This is a varchar column.
               405          1,3,5

ve ben aşağıdaki SELECT deyimi uygulamak çalışıyorum:

SELECT usrID, usrFirst, usrLast, usrEmail
    FROM tblUsers
    WHERE usrID NOT IN
    (
        SELECT users.usrID
            FROM
                `course_data` courses,
                `tblUsers` users
            WHERE
                days IN ('$day')
    )
    GROUP BY usrID
    ORDER BY usrID

$ Günlük değişken '1, 3 veya 5 'içeriyorsa Temelde, ben (405 kullanıcı) ile bu satır atlanmış istiyorum.

(Numarası "1" sütununda "1,3,5" olduğu için) Örneğin, $day = "1", boş bir sorgu dönmelidir.

Ancak, bu durum için bulamadı. $day = "1", hala o satır döndürür bile.

$day= "1,3,5." Ancak, ben IN () yan benim değişkenin herhangi bir kısmını almak ve bu sütuna uygulamak olacağını düşündüm eğer satır dönmeyecektir tek yoludur.

Ben burada yanlış yapıyorum üzerinde herhangi anlayışlar? Teşekkürler.

4 Cevap

IN Beyanında Alıntılar çıkarın. Sözdizimi:

... WHERE column IN (1,2,3)

Eğer kullanılan ve değil

... WHERE column IN ('1,2,3')

Ayrıca IN üzerinde documentation Daha fazla örnekler vardır.

Ben istediğiniz sorgu olduğunu düşünüyorum:

SELECT usrID, usrFirst, usrLast, usrEmail
FROM tblUsers
WHERE usrID NOT IN (
    SELECT user_id 
    FROM course_data
    WHERE find_in_set(?, days) > 0
)
ORDER BY usrID

Her gün o kendi satır vardır böylece Ama ciddi, veritabanını normalleştirme düşünmelisiniz.

gün dizeleri listesini tutmaz. Tek bir dize tutar. Is dize "1,3,5" {'1 '} dizelerinden biri içinde? Açıkçası cevap hayır. Farklı bir tabloya ya Refactor gün veya daha fazla dize manipülasyon yapmak için hazırlıklı olun