내가 EAV 테이블 keywords
에와 documents
테이블에서 레코드를 찾을 수와 OR 문에 쿼리를 만들려고 노력하고 있어요에서 검색 할 수 있지만, 그것은 나에게 반복 결과 제공 :은 어떻게 EAV 테이블 플러스 다른 MySQL의
SELECT d.id, d.name, d.created, d.updated
FROM documents d
INNER JOIN permissions p ON (d.wfid = p.wfId AND d.docid = p.docId AND p.userid = 1)
INNER JOIN keywords k0 ON (k0.document_id = d.id AND (k0.value IN('Pérez, Gabriel',
'DOC1') OR d.name IN ('Pérez, Gabriel', 'DOC1')))
ORDER BY d.id DESC;
+------+------+---------------------+---------------------+
| id | name | created | updated |
+------+------+---------------------+---------------------+
| 5267 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:39:10 |
| 5267 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:39:10 |
| 5267 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:39:10 |
| 5266 | DOC1 | 2014-03-07 11:41:23 | 2014-03-06 01:35:16 |
| 5266 | DOC1 | 2014-03-07 11:41:23 | 2014-03-06 01:35:16 |
| 5266 | DOC1 | 2014-03-07 11:41:23 | 2014-03-06 01:35:16 |
| 5265 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:37 |
| 5265 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:37 |
| 5265 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:37 |
| 5264 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:25 |
| 5264 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:25 |
| 5264 | DOC1 | 2014-03-07 11:41:23 | 2014-02-25 12:38:25 |
| 5263 | DOC1 | 2014-04-07 11:23:00 | 2014-03-20 09:54:30 |
| 5263 | DOC1 | 2014-04-07 11:23:00 | 2014-03-20 09:54:30 |
| 5263 | DOC1 | 2014-04-07 11:23:00 | 2014-03-20 09:54:30 |
+------+------+---------------------+---------------------+
15 rows in set (0.00 sec)
을 내가
SELECT DISTINCT
를 사용하는 경우
그때 나는 내가 원하는 것을 얻을.
내 질문은 :
1) 당사 최초의 복제 행입니까?
2) SELECT DISTINCT를 사용하는 것이 좋지 않습니까? 아니면 성능에 도움이됩니까?
3) 내 쿼리가 잘못 작성 되었습니까? 나는 (Google 검색 등) 일치가있는 경우, 문서 테이블과 키워드 표,
mysql> describe documents;
+---------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------+------+-----+---------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(100) | YES | | NULL | |
| wfid | char(50) | YES | | NULL | |
| docid | char(50) | YES | | NULL | |
| created | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------+-----------+------+-----+---------------------+-----------------------------+
6 rows in set (0.00 sec)
mysql> describe keywords;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| document_id | int(11) | NO | MUL | NULL | |
| keyword | char(50) | NO | | NULL | |
| value | varchar(250) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
쿼리가 잘못 작성된 것이 아니기 때문입니다. 데이터베이스 구조가 [bad-designed] (http://stackoverflow.com/questions/20782760/difference-between-two-table-structure/20783125#20783125) –
@ AlmaDo이기 때문에 그것입니다. 나는 그것의 나쁜 것을 알고 있습니다. 함께 살려면 두 번째 버전을 만들 때까지이 코드를 유지해야합니다. ( – JorgeeFG
엘 세뇨 르 페레즈는 누구이며 이름과 값 모두에 그의 이름이 나타나는 이유는 무엇입니까? –