-1

MySql テーブルからデータを見つける際に問題に直面しています。

表 A:

+-------+-------------+------+-----+-------------------+-------+
| ID    | Table_b_fk  |Value | age | name              | score |
+-------+-------------+------+-----+-------------------+-------+
| 01    | 01          | 255  |  21 | Tom               |  65   | 
| 02    | 02          | 36   |  20 | Peter             |  95   | 
| 03    | 03          | 25   |  22 | John              |  65   | 
| 04    | 04          | 36   |  20 | Bond              |  95   |<<----First 
| 05    | 05          | 258  |  22 | Smith             |  65   | 
| 06    | 06          | 420  |  20 | Robert            |  95   | 
| 07    | 07          | 258  |  22 | Nisarg Patel      |  65   | 
| 08    | 08          | 16   |  21 | Peter             |  95   | 
| 09    | 09          | 25   |  23 | J0k               |  65   | 
| 10    | 10          | 36   |  22 | Prodigitalson     |  95   | 
| 11    | 11          | 205  |  22 | Silver            |  65   |<<----Next
| 12    | 12          | 37   |  20 | Json              |  95   | 
| 13    | 13          | 285  |  23 | Villa             |  65   | 
| 14    | 14          | 36   |  22 | Parker            |  95   | 
+-------+-------------+------+-----+-------------------+-------+

表 B:

+-------+-------------+------+-----+-------------------+-------+
| ID    | Result      | M1   |  M2 | name              | score |
+-------+-------------+------+-----+-------------------+-------+
| 01    | Pass        | 30   |  26 | Tom               |  65   | 
| 02    | Pass        | 30   |  20 | Peter             |  95   | 
| 03    | Pass        | 25   |  60 | John              |  65   | 
| 04    | Pass        | 100  | 100 | Bond              |  95   |<<----First 
| 05    | Pass        | 55   |  65 | Smith             |  65   | 
| 06    | Pass        | 80   |  95 | Robert            |  95   | 
| 07    | Pass        | 65   |  75 | Nisarg Patel      |  65   | 
| 08    | Pass        | 56   |  71 | Peter             |  95   | 
| 09    | Pass        | 90   |  96 | J0k               |  65   | 
| 10    | Pass        | 96   |  96 | Prodigitalson     |  95   | 
| 11    | Pass        | 100  | 100 | Silver            |  65   |<<----Next
| 12    | Pass        | 47   |  92 | Json              |  95   | 
| 13    | Pass        | 82   |  73 | Villa             |  65   | 
| 14    | Pass        | 86   |  72 | Parker            |  95   | 
+-------+-------------+------+-----+-------------------+-------+

私はTableAとTableBに参加しています。ここで、TableATable_b_fkはTableBへの外部キーです。

TableB 列に一致するレコードを見つけていますM1 & M2 = 100

私のシナリオ: 1

04一致レコード ID : inの最初の出現を知っていTableAます。で次のレコードを検索したいM1 & M2 = 100。(Record Id-11) しかし、検索は01から始めるべきではありません。最後に見つかったレコード ID から開始する必要があります。つまり、O4から検索を開始して、レコードの次のオカレンスを見つける必要があります。

My Try: Limit を使用して検索しようとしましたが、検索に役立ちませんでした。これで誰かが私を助けることができますか?

編集: 1

私のシナリオ: 2 私の 2 番目のケースでは、私の TableB はデータを繰り返しており、ID は TableA で外部のものでした。どうすればレコードを見つけることができますか. ? 一致する ID/M1/M2 値: その解決策を見つけました。現在のレコードの FOREIGN KEY を見つけて、同じテーブル内の次のレコードの出現を確認したいだけで、次のレコードの儀式を取得できますか?

この場合、私の TableB レコードは TableA レコードと同じではありません。つまり、私の TableA レコードは tableA を指します。多対一。これは儀式ですか?

編集:2

すべての努力と知識に感謝しますシナリオの解決策を見つけました:2 チェックしてください:

CREATE TABLE TableB (
  ID Int,
  Result VARCHAR(20),
  M1 INT,
  M2 INT,
  name VARCHAR(20),
  Score INT);

INSERT INTO TableB VALUES
( 11    , 'Pass'        , 30   ,  26 , 'Tom'               ,  65   ), 
( 13    , 'Pass'        , 30   ,  20 , 'Peter'             ,  95   ),
( 80    , 'Pass'        , 25   ,  60 , 'John'              ,  65   ),
( 81    , 'Pass'        , 100  , 100 , 'Bond'              ,  95   ),
( 90    , 'Pass'        , 55   ,  65 , 'Smith'             ,  65   ),
( 96    , 'Pass'        , 80   ,  95 , 'Robert'            ,  95   ),
( 97    , 'Pass'        , 65   ,  75 , 'Nisarg Patel'      ,  65   ),
( 98    , 'Pass'        , 56   ,  71 , 'Peter'             ,  95   ),
( 99    , 'Pass'        , 90   ,  96 , 'J0k'               ,  65   ),
( 100    , 'Pass'        , 96   ,  96 , 'Prodigitalson'     ,  95   ),
( 101    , 'Pass'        , 10  , 10 , 'Silver'            ,  65   ),
( 103    , 'Pass'        , 47   ,  92 , 'Json'              ,  95   ),
( 201    , 'Pass'        , 82   ,  73 , 'Villa'             ,  65   ), 
( 222    , 'Pass'        , 86   ,  72 , 'Parker'            ,  95   )
;


CREATE TABLE TableA
    (`ID` int, `Table_b_fk` int, `Value` int, `age` int, `name` varchar(13), `score` int)
;

INSERT INTO TableA
    (`ID`, `Table_b_fk`, `Value`, `age`, `name`, `score`)
VALUES
    (01, 11, 255, 21, 'Tom', 65),
    (02, 81, 36, 20, 'Peter', 95),
    (03, 80, 25, 22, 'John', 65),
    (04, 97, 36, 20, 'Bond', 95),
    (05, 81, 258, 22, 'Smith', 65),
    (06, 06, 420, 20, 'Robert', 95),
    (07, 81, 258, 22, 'Nisarg Patel', 65),
    (08, 08, 16, 21, 'Peter', 95),
    (09, 96, 25, 23, 'J0k', 65),
    (10, 101, 36, 22, 'Prodigitalson', 95),
    (11, 222, 205, 22, 'Silver', 65),
    (12, 12, 37, 20, 'Json', 95),
    (13, 201, 285, 23, 'Villa', 65),
    (14, 101, 36, 22, 'Parker', 95)
;

その解決策は次のとおりです。

SELECT a.id  
FROM TableB b
INNER JOIN TableA a 
ON a.Table_b_fk = b.id
WHERE M1 = 100 and M2 = 100  AND a.ID>4 limit 1

制限は次のレコードを制限するだけです..(答えは5です)。

I ケースDoctrine 2: 以下のクエリ コードを使用します。

$qry = $this->manager()->createQueryBuilder()
        ->select(array('e', 's'))
        ->from('YOUR_DOMAIN', 'e')
        ->Join('e.table_b_k', 's')
        ->where("s.m1 = ?", $valueone)
        ->andwhere("s.m2 = ?", $valuetwo)
        ->andwhere("e.id > ?", $currentrecord)
        ->setMaxResult(1);

注:YOUR_DOMAINここに TableA があります。TableA と TableB はマッピングを介して結合する必要があるため、TableB として直接クエリで結合/参照する必要はありません。これは、上記の例の 2 行目の Join によって行われます。現在のところテストされていません。

4

4 に答える 4

1

これを試して

SELECT a.id  
FROM TableB b
INNER JOIN TableA a 
ON a.Table_b_fk = b.id
WHERE M1 = 100 and M2 = 100  AND b.ID>4

出力:

 ID
 11

デモフィドル

于 2013-06-30T10:04:28.990 に答える
1

これはどうですか、試してみてください

SELECT b.id AS next_id FROM tableb b LEFT JOIN tablea a 
ON (b.id =a.Table_b_fk ) WHERE b.M1=100 AND b.M2 =100 AND b.id >4 
ORDER BY b.id ASC  LIMIT 1

* M1 = 100 および M2 = 100 *の次のオカレンスが得られます。

Fiddle の例を参照11してください。次のオカレンス が返されます* M1 =100 および M2 =100 *

于 2013-06-30T08:51:40.357 に答える