4

http://i.stack.imgur.com/ZRH9c.jpg (データベース構造のサンプル画像をご覧ください)

こんにちは、みんな、

特定の文字で始まる 2 つのテーブルで単語を検索しようとしていますが、適切な結合方法がわかりません。

"user_vocabulary" に voc_id が指定されていない場合、user_vocabulary から単語を取得したいのですが、voc_id がある場合は、"system_vocabulary" WHERE user_vocabulary.voc_id=system.vocabulary.id からすべてのデータを読み取りたいです。

これは、1 つのテーブルを読み取るために使用します (参考までに): SELECT * FROM user_vocabulary WHERE word LIKE '$user_input%' ORDER BY word ASC

多かれ少なかれ同様の投稿をいくつか見つけましたが、それらをこの問題に変換できないようです。

どんな助けでも大歓迎です。乾杯トム

4

3 に答える 3

0

これを試して

SELECT *
FROM user_vocabulary
left join system_vocabulary
on system_vocabulary.voc_id = user_vocabulary.id
WHERE user_vocabulary.word LIKE '%$user_input%' or system_vocabulary.word like     '%$user_input%'
ORDER BY word ASC

編集済み

反対に

SELECT *
FROM user_vocabulary as uv
, system_vocabulary as sv
WHERE uv.word LIKE '%$user_input%'
or sv.word like '%$user_input%'
于 2012-04-10T12:13:28.550 に答える
0

出力の同じ列から取得した値user_vocabulary.wordsystem_vocabulary.word結果を同じ列にする必要があります。IF次の関数を使用してこれを行うことができます。

SELECT
  uv.id,
  IF(uv.voc_id = 0,uv.word,sv.word) AS WORD
FROM user_vocabulary uv
LEFT JOIN system_vocabulary sv
ON (uv.voc_id = sv.id)
HAVING word LIKE '%user_input%'

+------+-------+
| id   | word  |
+------+-------+
|    1 | hat   |
|    2 | home  |
|    3 | hello |
+------+-------+
3 rows in set (0.00 sec)
于 2012-04-11T11:59:07.990 に答える
0

これは、要件に従って機能するはずです。

SELECT user_vocabulary.id,
   COALESCE(system_vocabulary.word, user_vocabulary.word) word
FROM user_vocabulary
LEFT JOIN system_vocabulary
   ON system_vocabulary.id = voc_id AND voc_id <> 0
于 2012-04-10T12:33:01.267 に答える