2012-07-02 3 views
1

Im new для postgresql и php, но я ищу для полнотекстового поиска, и у меня возникают проблемы с запросом на основной запрос для текстового поиска, я бы хотел напечатать результат на экране, поскольку он будет показывать в postgres сама, помощь будет большой.Postgresql текстовый поиск с php

спасибо.

ответ

4

Theres много понятий в вашем вопросе, позволяет работать через него:

Прежде всего, необходимо CREATE TABLE:

CREATE TABLE person (
    id SERIAL PRIMARY KEY, 
    fullname TEXT NOT NULL, 
    dob DATE, 
    bio TEXT NOT NULL 
); 

Вставьте некоторые тестовые данные:

INSERT INTO person (fullname, dob, bio) VALUES 
('Steve Jobs', '1955-02-24', 'Steven Paul "Steve" Jobs...'), 
('Tutankhamun', NULL, 'Tutankhamun (alternately spelled...'); 

Чтобы сделать поиск быстрее вы должны создать полный текстовый индекс в столбце, который вы планируете искать:

CREATE INDEX person_fts ON person USING gin(to_tsvector('english', bio)); 

В вашем PHP скрипт вы должны connect to PostgreSQL:

$dbconn = pg_connect("dbname=mary"); 

Теперь вы можете сделать полнотекстовый поиск с pg_query():

$words = "steve jobs"; 
$sql = "SELECT * FROM person WHERE to_tsvector(bio) @@ to_tsquery('$words')"; 
$query = pg_query($dbconn, $sql); 
if(!$query) 
    die("An error occured.\n"); 

Если вы хотите вернуть Everthing, как вы видите его в psql затем отнести записи к TABLE:

echo "<table>"; 
while($row = pg_fetch_row($result)) { 
    echo "<tr>"; 
    foreach($row as $cell) 
    echo "<td>{$cell}</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 
+0

Да, я ударил, пока я редактировал (woops). –

+0

привет, таблица создания не работает в postgres 8.4, я получаю синтаксическую ошибку в нижней скобке); Мне кажется странным, что я могу создавать другие таблицы с одинаковым синтаксисом. –

+0

Исправлено. Это была дополнительная запятая. –

0
<?php 
$conn = pg_connect('host=localhost port=5432 dbname=test user=lamb password=bar'); 

$search = 'some words'; 

$result = pg_query($conn, "SELECT id, text FROM some_table WHERE text ILIKE '%$search%'"); 
?> 

<table> 
    <tr> 
    <th>ID</th> 
    <th>Text</th> 
    </tr> 
    <?php foreach($array = pg_fetch_all_columns($result) as $value): ?> 
    <tr> 
    <td><?php echo $value[0]; ?></td> 
    <td><?php echo $value[1]; ?></td> 
    </tr> 
    <?php endforeach; ?> 
</table> 
+1

LIKE/ILIKE - это не полнотекстовый поиск. –

Смежные вопросы