1

これは少し複雑になります。しかし、私がやろうとしていることを説明しようとします。

次のように、データベースにテーブルがあります。

表 - エントリ

ID | User | Address | Workflow | Audit Date |
1  | Tim  | 123     | 10 p/w   |  22/2/2013 |
2  | Bob  | 222     | 20 p/w   |  22/2/2013 |

対応するテーブルに写真があります:

表 - 写真

ID | JobNo | User | ImagePath | ImageName |
52 | 1     | Tim  | /1.jpg    | /2.jpg    |
53 | 1     | Tim  | /3.jpg    | /4.jpg    |

Pictures.Jobno が Entries.ID に対応するようになりました

さて、私が求めているのは、関連する jobNo に 2 つ以上のイメージ エントリがある場合に、テーブル Entries からすべてのエントリを一覧表示することです。1以下なら出品を無視したい。

したがって、現時点では、php を介して次のようなエントリを呼び出すことができます。

    function getAllEntries() {
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if (!($query = $mysqli->prepare("SELECT * FROM Entries
                                    ORDER BY Date DESC"))) {
     echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    if (!$query->execute()) {
    echo "Execute failed: (" . $query->errno . ") " . $query->error;
}
    $query->bind_result($ID, $User, $Address, $Workflow, $Audit);
    while ($query->fetch()) {
        //Echo each entry here
    }
    $query->close();
    $mysqli->close();
}

私の問題は、どうすればやりたいことを組み込むことができるかということです。私は言いたい:

すべてのエントリを選択します。表 Pictures には、Entries テーブルのジョブ番号/ID 比較に対応する 2 つ以上の画像があります。

私はこれが実行可能だと確信しています。しかし、SQLステートメントや、それを準備済みステートメントに正しくバインドする方法が思い浮かびません

SELECT * FROM Entries, Pictures, Where Pictures.Jobno = ID.Entries AND (写真の行数) >= 2.

か何か?これは単なるSQLの問題ですか?または、if ステートメントが必要で、別の SQL クエリを実行する必要がありますか。

私は php と sql を独学で学んでいるので、自分で解決する方法がよくわかりません。

4

1 に答える 1

2

これを処理する方法は、通常、Pictures ごとの数を取得し、句でJobNoそれらをフィルタリングするサブクエリに対して結合することです。>= 2HAVING

SELECT 
  entries.*, 
  numpics
FROM entries 
LEFT JOIN (
  /* Subquery joined returns aggregate COUNT() in pictures per JobNo */
  SELECT JobNo, COUNT(*) AS numpics FROM pictures GROUP BY JobNo
) pcounts ON entries.ID = pcounts.JobNo
HAVING numpics >= 2

http://sqlfiddle.com/#!2/347f4/8

MySQL の の寛容な扱いにより、サブクエリを使用せずに, againstGROUP BYだけで済む可能性があります。LEFT JOINpictures

/* MySQL Only */
SELECT entries.*
FROM
  entries 
  LEFT JOIN pictures ON entries.ID = Pictures.JobNo
GROUP BY entries.ID
HAVING COUNT(pictures.JobNo) >= 2
于 2013-02-10T19:04:09.147 に答える