Neden bu iki sorgu role
için farklı sonuçlar veriyor?Bu 2 SQL sorgusu farklı bir sonuç döndürüyor
SAĞ sonuç (rol haklı kullanıcıya ilişkilidir):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
WHERE role_users.user_id = users.id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
yanlış sonuç (rol her roles
tablonun ilk kayıttır):
SELECT
users.*,
activations.id AS activation
(SELECT
roles.name
FROM roles
INNER JOIN role_users ON roles.id = role_users.role_id
INNER JOIN users ON users.id = role_users.user_id
LIMIT 1) AS role
FROM users
LEFT JOIN activations ON users.id = activations.user_id
İlk sorguyu kullanamıyorum (WHERE role_users.user_id = users.id
ile) ve ikinciyi kullanmak zorundayım ('JOIN' ile): Doğru sonuca nasıl ulaşılır?
Teşekkür
DÜZENLEME: cevaplamak için yorumlar:
I can't use the first query
vasıta, kısacası, ben laravel Sorgusu->where('role_users.user_id', '=', 'users.id')
çevrildi ifadesiniWHERE role_users.user_id = users.id
, laravel Sorgu Oluşturucu ile inşa ve ediyorum Oluşturucu, işe yaramıyor çünküWHERE role_users.user_id = 'users.id'
gibi kullanılıyor. Raw() işlevini kullanabilirim ama bundan kaçınmak ve daha iyi bir çözüm aramak istiyorum.- Veritabanı şemasını oluşturmama rağmen Cartalyst Sentinel;
Ne demek 'İlk sorguyu kullanamıyorum', bu size Doğru sonucu verirse sorun nedir? –
SİPARİŞ BY olmadan LIMIT'in oldukça anlamsız bir kavram olduğunu unutmayın. Bu örnekte, LIMIT'in ne yapması gerektiğini göremiyorum. Kısacası, her iki sorgu da doğru bir sonuç verirse, niyetten ziyade bir şanstır. – Strawberry