0

私はこのデータベース設計を持っています:

**users_tbl**
id
username
name

**posts_tbl**
id
url
users_id *FK REFERENCE to users table*

**posts_contents_tbl**
id
posts_id *FK REFERENCE to posts table
title
description
date
views
click
isDeleted

このクエリを使用しています

SELECT a.name,a.username,c.*
FROM users_tbl a
LEFT JOIN posts_tbl b ON a.id = b.users_id
LEFT JOIN posts_contents_tbl c ON b.id = c.posts_id
ORDER BY c.id ASC

このクエリを実行しようとすると NULL の結果が返される理由、サンプル出力は次のようになります ここに画像の説明を入力

しかし、削除しようとすると、次のORDER BY c.id ASC出力が表示されます。 ここに画像の説明を入力

それは私の期待した結果ではありません。

私の予想される結果は、posts_contents_tbl が昇順で表示されると同時に、null 値が表示されないことです。私のデータベースの一部のユーザーは、posts_tbl に投稿データを持っていないため、表示されるべきではありません。

どうすればそれを行うことができますか?あなたの助けは非常に高く評価され、報われるでしょう!

ありがとう!

PS: データベースにはすでに何千ものレコードがあります。

4

3 に答える 3

2

その場合、投稿のあるユーザーのみを表示したいので、INNER JOIN代わりに ofを使用する必要があります。値が存在する理由は、レコードがテーブルに基づいており、それらの一部に投稿がないことを言及したためです。右?LEFT JOINNullusers_tbl

これを試して:

SELECT  a.name, 
        a.username,
        c.*
FROM    users_tbl a 
            INNER JOIN posts_tbl b
                ON a.id = b.users_id
            INNER JOIN  posts_contents_tbl c
                ON b.id = c.posts_id
ORDER BY    c.`date` DESC
于 2012-08-07T04:51:55.317 に答える
0

これがあなたが探しているものだと思います:

SELECT a.name,a.username,c.* 
FROM users_tbl a 
     INNER JOIN posts_tbl b 
         ON a.id = b.users_id
     LEFT JOIN posts_contents_tbl c 
        ON b.id = c.posts_id 
ORDER BY IFNULL(c.id, 0) ASC;
于 2012-08-07T04:50:29.203 に答える
0

本当に必要な場合は、利用できない場合はデータを表示しないでください.そして、そのposts_tblすべてのデータにposts_contents_tblは と が必要です.RIGHT JOININNER JOIN

次のようなクエリ:-

SELECT a.name,a.username,c.*
FROM users_tbl a
INNER JOIN posts_tbl b ON a.id = b.users_id
RIGHT JOIN posts_contents_tbl c ON b.id = c.posts_id
ORDER BY c.id ASC;
于 2012-08-07T05:13:14.747 に答える