2 Tablo karşısında Mysql SQL Query - Düzgün Do It Nasıl Emin Değil

3 Cevap php

Ben 2 tabloları (ilgisiz satırlar atlanmış) böyle kurdunuz:

> product
  - id
  - user_id

> thread
  - id
  - prod_id
  - user_id
  - due_date

şimdi konu tablodan tüm satırları alır bir sorgu oluşturmak istiyorsanız ya da:

  1. (örneğin), "5" bir thread.user_id var
  2. product.user_id "5" olan bir PROD_ID var

Ben, bunu yapmak için bir yol var gibi bir şey varsayarak yaşıyorum ...

SELECT 
    thread.due_date 
FROM
    product, thread 
WHERE 
    thread.user_id='5' 
OR 
    // not sure how to finish it

Bu noktaya kadar, ben sadece bunu yapmak için PHP kullanmak istiyorsunuz, ama gerçekten benim SQL bilgisi bir çentik kadar tekme gibi ve mümkünse SQL aracılığı ile bu çalışma almak istiyorum.

Teşekkürler -

3 Cevap

Bunu yapmak için, bir dış birleşim kullanmak gerekir:

SELECT thread.* FROM thread 
LEFT OUTER JOIN product
ON thread.prod_id = product.id
WHERE thread.user_id = 5 OR product.user_id = 5

Bulabileceğiniz bir problem, bir iş parçacığı bir kullanıcı kimliği 5 aynı zamanda kullanıcı kimliği 5 ile bir ürün varsa yinelenen konuları alabilir. Değil emin olsa sizin durumunuzda bir sorun olacaktır olduğunu. Sen SELECT DISTINCT bu (teşekkürler Alex Martelli) kaldırmak için kullanmak mümkün olabilir

Ben böyle bir şey yapardı:

SELECT t.due_date
FROM thread t
INNER JOIN product p ON p.id = t.prod_id
WHERE t.user_id = 5 OR p.user_id = 5

Edit: My example is using the SQL 92 standard. If you'd like to stick with the SQL-89 style join from your original post you can do something like:

SELECT thread.due_date
FROM product, thread
WHERE product.id = thread.prod_id
AND (thread.user_id = 5 OR product.user_id = 5)

Ancak, kontrol Beginning MySQL - bu iki standartları hakkında bazı bilgiler var.

SELECT thread.* LEFT OUTER JOIN product ON thread.prod_id=product.id WHERE thread.user_id=5 OR product.user_id=5;

Ben *. SEÇ parçacığı hakkında emin değilim ama o masadaki beri mantıklı. * Ayrıcalıklar tanınmasının zaman şeyler çalışır.