2016-03-23 16 views
0
ile bağlantı kurmak için başka bir değer seçin

Bir sorunum var. Bir "kullanıcılar" tablosunda "şirketler" tablosuna katılmak istiyorum. Mesele şu ki, bir kullanıcı ya bir şirketin yazarı/yaratıcısı olabilir ya da üye olabilir.Koşullu JOIN sorunu, bir alan boşsa

Bu, bir alan users.company alanından birinin boş olduğu anlamına gelir, ancak company.authorID alanı kullanıcı kimliği ile doldurulur veya İkinci durum, users.company şirket kimliği ile doldurulur ve companies.authorID boştur.

Şirketler tablosuna nasıl kullanıcılar tablosuna katılabilirim?

Katılmak maddesi içinde istediğinizi elde etmek için herhangi bir yolu var mı

LEFT JOIN companies ON companies.id = users.company AND IF users.company = '0' THEN ON companies.authorID = users.id 

gibi sth olmalı mı?

Çok teşekkürler! tam maddesi ile

Geçerli durum Bu çözüm ancak def çalışıyor

SELECT 
count(users.id), 
companies.city AS selectVariable 
FROM users 
LEFT JOIN companies ON companies.id = users.company OR (users.company = '0' AND companies.authorID = users.id) 
WHERE users.email <> '' AND users.deleted = '0' 
GROUP BY companies.city 
ORDER BY count(users.id) DESC 
LIMIT 20 OFFSET 0 

(sorgu çöküyor). Ancak ... olmak istiyorum

SELECT 
count(users.id), 
    (
    CASE 
     WHEN users.company = '0' THEN c2.city 
     WHEN users.company > '0' THEN c.city 
     ELSE NULL 
    END) AS selectVariable 
FROM users 
LEFT JOIN companies c ON c.id = users.company 
LEFT JOIN companies c2 ON c2.authorID = users.id 
WHERE users.email <> '' AND users.deleted = '0' 
GROUP BY selectVariable 
ORDER BY count(users.id) DESC 
LIMIT 20 OFFSET 0 
+0

bir şirket ile ilişkili olmayan kullanıcıları saymak istiyor musunuz hiç? Bir kullanıcı, bir içerik oluşturucu/sahip olmanın yanında üye olabilir (aynı şirket olmak zorunda değildir). –

+0

Sadece basit bir işlem sırası değil mi? OR deyiminin yalnızca ikinci yarısında parantezleriniz var. İlk yarıyı da bağlarsan ne olur? JOIN Table ON (koşul1) VEYA (koşul2) –

+0

@MaxxaM hey, şimdi parantez şeyi deneyeceğim. Her kullanıcıya bir şehir almak istiyorum. ama şehir şirketin bir parçası. – jQuery

cevap

0

Evet, içinde or kriterlerini kullanabilirsiniz kadar net değil join:

LEFT JOIN companies c ON c.id = u.company 
      OR (u.company = '0' AND c.authorID = u.id) 
+0

Hey hızlı cevap için teşekkürler. Bir sorun, select yan tümcesinde bir count (users.id) kullanıyorum ve birleşim yan tümcesinde veya bir kez kullanıyorum performans bitti ... Şimdi tüm iletiyi ana postada şimdi yayınladım – jQuery

+0

@jQuery - hangi hatayı alıyorsun? Sorgunuz gönderildiği gibi çalışmalıdır ... – sgeddes

+0

onun db çökmesini, sonsuza kadar alarak ... kullanıcıların 60 bin giriş ve şirketler var 15k – jQuery