私のデータベースからいくつかのデータを返すには、次のmysqlクエリを使用しています。現在のところ、cities
テーブルには何も入っていません。このクエリは、見つかった最初に一致するエントリだけを返し、一致するエントリはすべて見つからないことに気付きました。すべてのテーブルから一致するすべての結果を返すようにこのクエリを変更する方法はありますか?mysqlクエリの組み込みに問題があります
私が$ query = 'h'に行った場合、クエリはhで始まるすべてのイベント、会場、都市を返すはずです。
SELECT name, 'Events' as source
FROM events
WHERE name LIKE '".$query."%'
UNION ALL
SELECT name, 'Venues' as source
FROM venues
WHERE name LIKE '".$query."%'
UNION ALL
SELECT name, 'Cities' as source
FROM cities
WHERE name LIKE '".$query."%'
OR FIND_IN_SET('".$query."%', Alternate_name)
解決策を投稿するのではなく、修正する方法を説明してください。私はまだ学んでおり、理解したい。
編集:(文字Hを含む$クエリー変数で)置換後
クエリ:次のように
SELECT name, id, 'Events' as source FROM events_basic WHERE name LIKE 'h%' UNION ALL
SELECT name, fsq_id, 'Venues' as source FROM venues_cache WHERE name LIKE 'h%' UNION ALL
SELECT name, geo_id, 'Cities' as source FROM static_cities WHERE name LIKE 'h%' OR FIND_IN_SET('h%', alternate_names)
私が使用したPHPのコードは次のとおりです。 `
$query = 'h';
$query = $this->db->query("SELECT name, 'Events' as source FROM events WHERE name LIKE ".$query."%' UNION ALL
SELECT name, 'Venues' as source FROM venues WHERE name LIKE '".$query."%' UNION ALL
SELECT name, 'Cities' as source FROM cities WHERE name LIKE '".$query."%' OR IND_IN_SET('".$query."%', Alternate_name)");
if($query->num_rows > 0)
{
$results = $query->row_array();
print_r($results);
}`
考えられるのは、変数$ queryには、イベント、都市または会場の名前または部分名が格納されているということです。クエリは、指定された名前と一致するイベント、会場、都市の名前を返します。私は十分に明確化されたiveを望む、そうでなければ、もっと明確にしようとするだろう。
あなたのSQLは正しいようです。あなたはFIND_IN_SET条件については説明しませんが、ORとなっているので、何の問題も起こっていないと推測しています。問題の正確さを説明するためにいくつかのデータサンプルを与えることで、さらに説明できますか? – wisefish
このSQLクエリとフェッチステートメントも実行するPHPコードを投稿してください。 – Astha
上記の私の質問をPHPコードで編集しました。 – Derek