0

次のようなクエリを作成する必要があります。

SELECT p.pid, p.url FROM products as p WHERE url_crc IN (FNV_64("http://url1.com/"),FNV_64("http://url2.com/"))

すべての配列変数に FNV_64 ハッシュ関数を使用する必要があります。変数をクエリビルダーに渡す前にハッシュを作成できません。このハッシュ関数は、MySQL 拡張としてのみ使用できます。

Symfony2 を使用してこれを作成するにはどうすればよいですか? たとえば、次を使用します。

$qb = $em->createQueryBuilder();
$query = $qb->select('p.pid')
            ->from('SRC\MainBundle\Entity\Product', 'p')
            ->where('p.url_crc IN (FNV_64(:urls))') // error HERE
            ->setParameter('urls', $hashes_array)
            ->getQuery();

うまくいきません。私ができる唯一の方法は次のとおりです。

$query = $em->createNativeQuery('SELECT p.pid, p.url FROM products as p
                                WHERE url_crc IN (' . join(',', $tmp_array) . ')', $rsm);

tmp_array は次のようになります。

Array
(
    [0] => FNV_64("http://url1.com/")
    [1] => FNV_64("http://url2.com/")
)

より良い方法はありますか?

4

1 に答える 1

1

いつでも DQL をバイパスできます。ただし、Doctrine2 はさまざまなデータベース エンジンをサポートするように設計されており、「DQL にベンダー固有の SQL 機能」を追加できます。このリンクを読んで、mysql 拡張機能をサポートするコーディング方法を確認できます。例として参照できる多くの拡張機能を含む github リポジトリへのリンクもあります。

もう 1 つ、ここで FNV ハッシュの php 実装を少なくとも 1 つ見つけました。

于 2012-07-26T01:10:07.167 に答える