SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL

MySQL Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.05.2009, 14:41:30
newgame newgame ist offline
Anfänger
 
Registriert seit: May 2009
Alter: 41
Beiträge: 2
Subquery Problem (Verständnis?)

hallo,
ich habe ein Problem mit einer mysql query in php genauer wordpress. Ich bin dabei eine Suchfunktion zu erstellen, die den Titel, das Exzerpt und die Tags eines posts nach den eingegeben keywords des users durchsucht und die ergebnisse nach Bewertung/Datum/Aufrufe/(Relevanz, aber im Moment scheint sich der Aufwand es hinzubiegen nicht zu lohnen) ordnen kann.

Posts nach Bewertung/Datum... zu ordnen stellt isoliert kein Problem dar. Ebenfalls funktioniert die Suche nach Stichworten auch, allerdings wieder isoliert. Das Problem entsteht wenn ich beides in einer mySQL-Query realisieren will (wenn es in mehreren ginge wäre es auch gut, aber ich kann mir nicht denken wie ich in php eine zweite Query auf die Ergebnisse der ersten anwenden kann).

Für mein Projekt war es sinnvoller tags als metakey eines jeden Posts zu integrieren statt das tagsystem von wordpress zu benutzen. Jedoch habe ich auch die Anzahl der Aufrufe eines Posts als Metakey gespeichert.
Code:
$total ="
          SELECT wposts.*
            FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->term_relationships wcategory
            WHERE
            (   ( MATCH(wposts.post_title, wposts.post_excerpt) AGAINST ('".$keywords."' IN BOOLEAN MODE) )
            OR  ( wpostmeta.meta_value LIKE '%".$keywords."%' ) )
            AND wposts.ID = wpostmeta.post_id
            AND wposts.ID = wcategory.object_id AND wcategory.term_taxonomy_id = '21'
            AND wpostmeta.meta_key = 'tags'
            AND wposts.post_status = 'publish'
            AND wposts.post_type = 'post'
           
            ";
Das funktioniert zum Beispiel ganz gut. Aber hier ordne ich ja die Ergebnisse nach Aufrufen auch nicht. Das würde meiner Meinung nach auch nicht klappen, denn ich müsste irgendwie den metakey 'views' einbringen was alles zerstören würde, nämlich so
Code:
$total ="
          SELECT wposts.*
            FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->term_relationships wcategory
            WHERE
            (   ( MATCH(wposts.post_title, wposts.post_excerpt) AGAINST ('".$keywords."' IN BOOLEAN MODE) )
            OR  ( wpostmeta.meta_value LIKE '%".$keywords."%' ) )
            AND wposts.ID = wpostmeta.post_id
            AND wposts.ID = wcategory.object_id AND wcategory.term_taxonomy_id = '21'
            AND wpostmeta.meta_key = 'tags'
            AND wposts.post_status = 'publish'
            AND wposts.post_type = 'post'
            AND wpostmeta.meta_key = 'views'
            ORDER BY CAST(wpostmeta.meta_value AS SIGNED) DESC
            ";
Irgendwie schließt es sich doch logisch aus und was soll jetzt meta_value sein. Man weiß es nicht.

Meine Lösungsstrategie war nun folgende (Monolog): " Ich muss es irgendwie schaffen mit einer SELECT Anweisung eine Tabelle anzufragen, die nur Zeilen enthält, die die Bedingung erfüllen in den entsprechenden Feldern die eingegebenen Suchworte des Users zu besitzen (
Code:
(   ( MATCH(wposts.post_title, wposts.post_excerpt) AGAINST ('".$keywords."' IN BOOLEAN MODE) )
            OR  ( wpostmeta.meta_value LIKE '%".$keywords."%' ) )
).
Und dann ordne ich mit einer weiteren SELECT Anweisung die Tabelle nach Aufrufen/Bewertung etc.
Aber wie soll das gehen? Sind Subqueries eine Lösung. Mal schauen"

Jedenfalls dachte ich, dass ich es mit subqueries schaffen werde. Aber NEIN! Irgendwie entstehen merkwürdige Fehler, die teilweise keine Fehlermeldung ausgeben (auch nicht in phpmyadmin) sondern entweder passiert nichts oder die Seite wird nur halb geladen, oder ich habe hundert Tausend Ergebnisse obwohl ich vielleicht nur 100 Datenbankeinträge habe.
Naja hier meine neue Query (eigentlich nicht mit allen features die ich haben will, aber es klappt ja so schon nicht)
Code:
$total ="
          SELECT wposts.*
            FROM $wpdb->postmeta wpostmeta, $wpdb->term_relationships wcategory,
              ( SELECT searchposts.*
                FROM $wpdb->posts searchposts, $wpdb->postmeta searchpostmeta
                WHERE
                ( (MATCH(searchposts.post_title, searchposts.post_excerpt) AGAINST ('".$keywords."' IN BOOLEAN MODE))
                  OR    (searchpostmeta.meta_value LIKE '%".$keywords."%')  )
                AND searchpostmeta.meta_key = 'tags' 
                AND searchposts.ID = searchpostmeta.post_id
                AND searchposts.post_status = 'publish'
                AND searchposts.post_type = 'post'
              ) AS wposts    
            "
Durch ergiebiges Rumprobieren glaube ich, dass das Problem an den mehreren Tabellenreferenzen Nach FROM liegt.
Das funktioniert zum Beispiel:
Code:
SELECT wposts.*
            FROM
              ( SELECT searchposts.*
                FROM wp_posts searchposts
                WHERE searchposts.post_status = 'publish'
                AND searchposts.post_type = 'post'
              ) AS wposts
Also Leute, ich hoffe ihr versteht mein Problem und könnt mir helfen.

Anm: Hier die Datenbanken von Wordpress http://codex.wordpress.org/Database_Description
Mit Zitat antworten
  #2  
Alt 29.05.2009, 23:01:27
newgame newgame ist offline
Anfänger
 
Registriert seit: May 2009
Alter: 41
Beiträge: 2
AW: Subquery Problem (Verständnis?)

Durch genaues analysieren eines mysql artikels bin ich auf die Lösung gekommen

Falls es wen interessiert:
Code:
$total ="
			SELECT wposts.*
            FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
            WHERE wposts.ID = wpostmeta.post_id
            AND wpostmeta.meta_key = '_views'
            AND wposts.post_status = 'publish'
            AND wposts.post_type = 'post'
            AND wposts.ID = ANY (
            	SELECT wposts.ID
                FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
                WHERE
                (   ( MATCH(wposts.post_title, wposts.post_excerpt) AGAINST ('".$keywords."' IN BOOLEAN MODE) )
                OR  ( wpostmeta.meta_value LIKE '%".$keywords."%' ) )
                AND wposts.ID = wpostmeta.post_id
                AND wpostmeta.meta_key = 'tags'
                AND wposts.post_status = 'publish'
                AND wposts.post_type = 'post'
            )
            ORDER BY CAST(wpostmeta.meta_value AS SIGNED) ASC
            ";
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Subquery jschol MySQL 0 02.09.2007 20:43:27
MySQL Subquery Problem DominikJ MySQL 5 07.01.2007 15:56:18
Problem mit Lokalisierung eines SESSION - Problems Fabian85 PHP für Fortgeschrittene und Experten 5 03.10.2005 21:17:54
Mysql subquery problem Ted MySQL 6 28.01.2004 17:15:49
mysql und php problem schmidt PHP für Fortgeschrittene und Experten 9 31.10.2003 19:05:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:39:51 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.


© 2001-2019 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt