1

私はこのテーブルを持っています:

+---------+----------+
+  Items  +  Person  +
+---------+----------+
+ 2,99,75 +  Jack    +
+ 4,9,63  +  Rose    +
+---------+----------+

今、私は簡単なことをします

LIKE :items

を使用してバインドします

$stmt->bindParam(':items',$item,PDO::PARAM_STR);

どこ

$item = "%9%".

結果にはJackRoseの両方が含まれていますが、結果としてRoseのみを期待していたため、これは間違っています。LIKE99 と 9 の両方が表示されるようLIKEです$items

4

3 に答える 3

1

これに関する主な問題は、@ interrobangが言ったこと、つまりデータを表現する方法だと思います。

表示するこのテーブルXが各個人のリストイテンである場合、個人IDの列と、アイテムIDの別の列、および各個人の複数のイテンを表す複数の行が必要です。このようにすることで、検索ははるかに高速で使いやすくなり、将来的に維持できるようになります。

SQLフィドル

MySQL 5.5.30スキーマのセットアップ

CREATE TABLE person (
     id int auto_increment primary key, 
     name varchar(20)
);

CREATE TABLE item (
     id int auto_increment primary key, 
     name varchar(20)
);

CREATE TABLE person_item (
     id int auto_increment primary key, 
     person_id int,
     item_id int
);

ALTER TABLE person_item ADD UNIQUE (person_id,item_id);

INSERT INTO person(id,name) VALUES
(1, 'John'),
(2, 'Mary'),
(3, 'Oliver');


INSERT INTO item (id,name) VALUES
(1,'Pen'),
(2,'Pencil'),
(3,'Book');

INSERT INTO person_item (person_id,item_id) VALUES
(1,1),
(1,3),
(2,2),
(3,1);

クエリ1

select p.name from person_item pi, person p, item i
where pi.person_id = p.id
and pi.item_id = i.id
and i.name LIKE 'Book%'

結果

| NAME |
--------
| John |
于 2013-03-13T04:17:57.007 に答える
1

% は 1 つ以上の文字 (何でも) を表すためです。したがって、99 は「%9%」に一致します。

9つだけが必要な場合は、試してみてください

"%,9,%"
于 2013-03-13T04:13:35.150 に答える