2013-06-08 2 views
0

Я новичок в mysql.Подсчет с использованием решения Toxi

Я хотел разработать простую систему тегов для своего блога и наткнулся на это решение «Toxi» из 3 таблиц.

Итак, у меня есть 3 таблицы:

`blog` containing `id` and `title`. 
`blog_tags` containing `id` and `tags_id` and `blog_id`. 
`tags` containing `id` and `name`. 

tags_id подключен к Internal Relation к id в tags таблице. Аналогичным образом blog_id подключен к Internal Relation по id в blog Таблица.

Так что, когда в моей функции (где я получаю массив всех тегов, относящихся к одному блог) Я выполнить запрос, например (проходящий блог id в качестве параметра в функции),

$result = mysql_query("SELECT tags_id FROM blog_tags WHERE blog_id = '".$id."'"); 
    $tags = array(); 
    if($result === FALSE) { 
     die(mysql_error()); // TODO: better error handling 
    } 
    while($row = mysql_fetch_assoc($result)) { 
     $tags[] = I don't know what should come over here? 
    } 
    return $tags; 

Или есть ли другой способ выполнения запросов в этой реализации Toxi?

+0

В чем ваш вопрос? Есть ли проблема с этим подходом? – peterm

+0

@peterm: Что должно быть в этой строке: '$ tags [] = ??' – xan

ответ

0

ОБНОВЛЕНО Вам нужен простой JOIN. Ваш запрос должен выглядеть

SELECT bt.tags_id, t.name 
    FROM blog_tags bt JOIN tags t 
    ON bt.tags_id = t.id 
WHERE bt.blog_id = n -- < n is an id of a blog 

Вот SQLFiddle демо.

Теперь PHP довольно просто

$sql = "SELECT bt.tags_id, t.name 
      FROM blog_tags bt JOIN tags t 
      ON bt.tags_id = t.id 
     WHERE bt.blog_id = $id";  
$result = mysql_query($sql); 
if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling 
} 
$tags = array(); 
while($row = mysql_fetch_assoc($result)) { 
    $tags[] = $row['name']; 
} 
... 

На стороне записки: переключатель для PDO или MySQLi. Расширение mysql_ * устарело. В PDO вы можете использовать синтаксический сахар fetchAll(). И еще важнее научиться использовать подготовленные заявления. Прямо сейчас ваш код уязвим для SQL-инъекций.

+0

Но это даст мне 'tags_id', я хотел бы хранить« имя »тегов из таблицы« теги »в массиве' $ tags' , Я мог бы выполнить два вложенных запроса, но это было бы «O (^ 2)». Я предполагаю, что должен быть лучший способ добиться этого. – xan

+0

@ptokya Вы были очень неясны в этом вопросе. Но в любом случае см. Обновленный ответ. – peterm

+0

Спасибо. Извините, за плохое оформление вопроса. – xan

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