Ich habe eine App, die die Coderegister CXTags Tagging-Bibliothek verwendet.PHP: Aktive Datensatztabelle verbindet
Die Datenbankstruktur ist wie folgt:
Beiträge
ID
tags_ref
row_id
Tabelle
tag_id
Tags
id
safe_tag
Tag
Meine Frage geht im Grunde, wenn $ safe_tag nicht null ist dann tags_ref beitreten auf post.id = tags_ref.row_id , trage tags Tags auf tag_ref.tag_id = tags.id ein, wo tags_ref.table = 'posts' und tags.safe_tag = 'essen'
SELECT * FROM posts
JOIN tags_ref ON posts.id = tags_ref.row_id
JOIN tags ON tags_ref.tag_id = tags.id
WHERE tags.safe_tag = $safe_id
Leider funktioniert die Abfrage, die ich im aktiven Datensatz geschrieben habe, nicht richtig. Die Abfrage funktioniert einwandfrei, wenn £ safe_tag null ist, aber wenn es nicht ist, bekomme ich falsche Ergebnisse. Hier
function get_posts($id = NULL, $safe_tag = NULL) {
if($safe_tag != NULL){
echo $safe_tag;//debugging
$table = 'posts';
$this->db->join('tags_ref', 'posts.id = tags_ref.row_id');
$this->db->join('tags', 'tags_ref.tag_id = tags.id');
$this->db->where('tags_ref.table', $table);
$this->db->where('tags.safe_tag',$safe_tag);
}
//if an id was supplied
if ($id != NULL) {
$this->db->where('posts.city_id',$id);
}
// execute query
$query = $this->db->get('posts');
...
ist die Abfrage mit einer Profilierung auf:
SELECT *
FROM (`posts`)
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id`
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id`
WHERE `tags_ref`.`table` = 'posts'
AND `tags`.`safe_tag` = 'food'
AND `posts`.`city_id` = '2'
Kann jemand einen Blick? Ich denke, ich brauche neue Augen darauf.
zuerst zu laufen «Leider ist die Abfrage, die ich in aktiver Datensatz geschrieben habe, ist nicht fuctioning richtig» - Fehler oder unerwartete Datenmenge zurückgegeben? Können Sie die SQL-Abfrage vor der Ausführung als String mit Ihrer $ this-> db sehen (debuggen)? –
Ich finde die CI Active Record Klasse sehr restriktiv und verwende sie nur für Updates und Einfügungen. Darüber hinaus verwenden Sie $ db-> query ("SELECT * FROM Tabelle WHERE id =?", Array ($ id)). Sie müssten nicht Kompromisse eingehen, wie Sie es für die zusätzliche Join-Klausel in Ihrem Code zu tun scheinen, und Sie würden keine zusätzliche Belastung auf dem Server für die Analyse Ihrer aktiven Datensatzabfrage verursachen. Tut mir leid, ich weiß, das beantwortet deine Frage nicht wirklich, wollte nur meine Gedanken teilen. – Naatan
Übrigens können Sie die ausgeführten Abfragen sehen, indem Sie Profiling aktivieren (http://codeigniter.com/user_guide/general/profiling.html). – Naatan