2016-12-06 10 views
0

これはMySQLデータベースのサインアップテーブルです。ゼロレコードが存在しない場合のみSQLレコードが返されます

SIGNUP 
id (int) 
customer (int) 
helper (int) 
eid (int) 
..plus more fields 

このクエリは、データベースにレコードを戻したい場合は0の結果を返します。状況は、SIGNUPテーブルにcustomer = 11、helper = 0、およびapproved = 0のレコードが1つあります。

ヘルパーフィールドに0以外の数値が設定されている場合はレコードが返されますが、0 0レコードが返されます。 2番目の選択行(v.field1、v.field2などを含む)を取り出すと、それも機能します。問題は、ヘルパー列から引き出すデータがないため、何か他のものを返すことはできませんが、他のフィールドについては返すデータが残っているようです。アイデアを開いて、すべての助けに感謝します!ありがとうございます..

SELECT 
    u.id cId, u.first cFirst, u.email cEmail, u.username cUsername, 
    v.id hId, v.first hFirst, v.email hEmail, v.username hUsername, 
    s.customer, s.helper, s.eid EID, s.approved, 
    e.name, DATE_FORMAT(e.date, '%W, %b %e %Y %l:%i %p') date, e.summary, e.street, e.city, e.state, e.zip eZip 
FROM signup s 
INNER JOIN events e ON e.id = s.eid 
INNER JOIN users u ON u.id = s.customer 
INNER JOIN users v ON v.id = s.helper 
WHERE 
    (s.customer = 11 OR s.helper = 11) 
AND e.date > sysdate() 
ORDER BY e.date asc 
+0

こんにちは、これは正しい参加していますか? INNER JOINイベントe ON IDS.ID = s.eid INNER JOINユーザーu.id = s.customer INNER JOINユーザーv ON v.id = s.helper通常、IDと外部キーでバインドする必要があるためそれぞれ – jam

答えて

1

代わりにこれを試してみてください:

SELECT 
    u.id cId, u.first cFirst, u.email cEmail, u.username cUsername, 
    v.id hId, v.first hFirst, v.email hEmail, v.username hUsername, 
    s.customer, s.helper, s.eid EID, s.approved, 
    e.name, DATE_FORMAT(e.date, '%W, %b %e %Y %l:%i %p') date, e.summary, e.street, e.city, e.state, e.zip eZip 
FROM signup s 
INNER JOIN events e ON e.id = s.eid 
INNER JOIN users u ON u.id = s.customer 
left JOIN users v ON v.id = s.helper 
WHERE (s.customer = 11 OR s.helper = 11) 
AND e.date > sysdate() 
ORDER BY e.date asc 
+0

LEFTはそれを固定してくれてありがとう – Retro

1

私が正しく理解している場合はLEFT JOINが必要です。これにより、一致するヘルパーがなくてもすべての行が取得されます。

SELECT 
    u.id cId, u.first cFirst, u.email cEmail, u.username cUsername, 
    v.id hId, v.first hFirst, v.email hEmail, v.username hUsername, 
    s.customer, s.helper, s.eid EID, s.approved, 
    e.name, DATE_FORMAT(e.date, '%W, %b %e %Y %l:%i %p') date, e.summary, e.street, e.city, e.state, e.zip eZip 
FROM signup s 
INNER JOIN events e ON e.id = s.eid 
INNER JOIN users u ON u.id = s.customer 
LEFT JOIN users v ON v.id = s.helper 
WHERE 
    (s.customer = 11 OR s.helper = 11) 
AND e.date > sysdate() 
ORDER BY e.date asc 
+0

ありがとうございました、LEFTの参加は正しいです – Retro

関連する問題