Komplexer SQL Befehl über zwei Tabellen

  • Hallo Leute,
    ich möchte in den Metakey meines Content Wörter hinzufügen, die momentan über eine andere Komponente dem Content zugordnet ist. Dafür suche ich den passenden SQL Befehl


    2 Tabellen sind daran beteilgt


    XX_custom_properties
    EInzig wichtig ist da die "value_id". Folgende habe ich:
    value_id 58
    value_id 59
    value_id 60
    value_id 61
    value_id 62
    value_id 63
    value_id 64
    value_id 65
    value_id 66
    value_id 67
    value_id 73
    value_id 74


    In dieser Tabelle ist pro Zeile einer value_id einer contend_id zugeordnet. Wobei auch mehrere value_id einer content_id zugordnet sein können (aber natürlich nur pro Zeile ein Befehl)


    Tabelle zwei ist natürlich XX_content
    Die Spalte ist metakey
    In diese sollten die value_ids übertragen werden, die der contend_id zugordnet sind.
    Da allerdings schon metakey eingetragen sind, sollten sie am Ende der Metakey drangehängt werden, also ", value_id"


    Also sagen wir der Artikel mit der contend_id 2500 hat in den xx_custom_properties zwei einträge, denen die value_id 59 und 66 zugeordnet ist.
    Die bisherige Metakey lautet "Wort1, Wort2". dann sollte im feld metekay folgendes stehen "Text1, Text2, 59, 66"


    Eigentlich sollte das mit einem SQL Befehl möglich sein, leider reichen meine Kenntnisse nicht um das zu lösen. Ich nehme aber an das man für jede value_id einen Befehl braucht, der quasi so lautet


    WENN content id 1 ist die value_id 58 zugeordnet, dann füge zur Metaky von contend id 1 folgenden Text hinzu: ", 58"


    Der nächste Befehl
    WENN contend id 1 ist die value_id 59 zugeordnet, dann füge zur Metakey von contend_id 1 folgenden Text hinzu: ", 59"


    Die Contend_ID sollte natürlich nicht manuell eingegeben werden, sondern der Befehl alle content-Einträge durchgehen.

  • So grundsätzlich: In den Metakeys sollten nur Wärter stehen, die auch im Inhalt vorkommen. Metakeys werden ausschließlich von Metasichmachinen abgefrrgt, deren Marktanteil um 1% bis 5% liegen . Google schaut nicht auf die Metakeyqwords, sondern arbeitet anders.
    Somit verstehe ich nicht, warum diese Arbeit sein muss?


    Ansonsten brauchst du wohl eine Join-Abfrage in SQL.



    Axel

  • Ich fürchte, dass sich keiner hinsetzen einfach so aus Nettigkeit für dein Portal arbeiten wird.
    Vielleicht hast du eine Chance wenn du es nach den Stackoverflow regeln machst: Du schreibst eine Beispieltabelle und das SQL so gut du kannst. Wenn die Supporter dort sehen dass sich einer richtig angestrengt hat dann helfen sie weiter.

  • Ich schreibe die auch nicht mal so aus dem Ärmel und auch nicht in 2 Minuten, obwohl ich die Technik kenne und kann.
    Join ist doch aber ein Hinweis. ;)
    Ansonsten gibts mittlerweile die Tags (Schlagwäörter) in Joomla, wo du einiges mit machen kannst. Und sogar im Zusammenhang mit SEI.
    Vielleicht eine Alternative?!



    Axel

  • Ich versuche mal was hinzubasteln die nächsten Tage und mich hier wieder melden. Der JOIN Hinweis war schon mal hilfreich.


    Die Tags (Schlagwörter) nutze ich nicht und sehe auch keinen Bedarf, weil ich bezüglich SEO keinen zusätzlichen positiven Vorteil sehe, genauso wie natürlich die Metakeys. Aber mit den Metakeys kann ich selbiges wie mit den Schlagwörtern bewirken ohne die DB zusätzlich mit haufenweise Tags-Einträge zu belasten (bei mir sind die Metakeys am Ende des Beitrages zur Suche verlinkt. Klickt der User auf einen Metakey findet er alle Beiträge die ebenfalls diesen Metakey enthalten - also quasi selber Effekt wie bei den Tags)

  • Jein.
    Ich habe auch sehr lange mit den Metakeys gearbeitet und diese mit dem zugehörigen Modul verlinkt/eingebunden. Also so, wie du es machst.
    Die Tags bieten auf den den ersten Blick das gleiche, haben aber eine etwas andere Mimik. Du kannst sie beispielsweise einblenden bei den Beiträgen und somit Hinweise geben, zu welchen Bereichen ein Beitrag gehört. Und du kannst einzelne Tags anklicken und erhälst dann auch nur diese als Auswahl.
    Bei der Metakeywords-Variante erhälst du immer alle Einträge, die mit nur einem der angegebenen Stichwörtern übereinstimmen. Im schlimmsten Fall hast du zig Beiträge, die nicht wieter sortiert sind.
    Bei den Tags werden dir wirklich nur die Beiträge angezeigt, die das eine angeklickte Stichwort enthält.


    Du kannst also ganz anders filtern mit den Tags.
    Bei den Tags gibt es übrigends auch noch weitere Filterungen, die du dir ansehen solltest.


    Und SEO-technisch: Die Tags können, wie geschrieben, eingeblendet werden und du hast damit zusätzlichen Inhalt, den du mit geschickten Tags SEOmäßig vergrößern kannst. Metakeys hingegen werden nur noch von Meta-Suchmaschinen ausgewertet. Die großen Suchmaschinen ignorieren die Metakeys.



    Axel

  • Hallo,


    also, Deine Erklärung birgt schon ein wenig Dein Problem, es scheint mir sehr verwirrend und ich versuche das Rätsel ein wenig zu lüften:


    Tabelle1: "XX_custom_properties"
    value_id
    contend_id


    Tabelle2: "XX_content"
    contend_id
    metakey


    Jetzt einige wichtige Fragen:
    Das Feld "value_id" ist eindeutig?
    Das Feld "metakey" hat überall schon Einträge oder muß das geprüft werden?
    Muß in "metakey" geprüft werden, ob der Eintrag aus "value_id" schon vorhanden ist?


    Jede der oben gestellten Fragen birgt ein SELECT gegen die betroffenen Tabellen...


    Das ist unheimlich wichtig, da ein (wie in diesem Fall) "INNERJOIN" sehr komplex würde oder in dieser Form kaum anwendbar wäre.
    Ich würde sowieso alles in eine Schleife packen (mal ins unreine gesprochen): "foreach value_id in XX_custom_properties" usw.
    und dann mit einer INNERJOIN: SELECT XX_custom_properties.value_id FROM (Tabellen/INNERJOIN definieren) WHERE XX_custom_properties.content_id = XX_content.content_id


    Das mußt Du dann noch so bauen, daß das INNERJOIN paßt. Dafür habe ich jetzt keine Lust. Zumal ich mit MS T-SQL arbeite und den genauen Syntax zu MySQL nicht weiß (falls es einen gibt).


    In der Schleife kannst Du dann auch das "Clearing" Deines "metakey"-Feldes abhandeln. Meines Erachtens wird es daher bei einem kleinen SQL-Befehl leider nicht bleiben, denke ich.


    Viel Spaß und Erfolg und beste Grüße
    Walter

  • @time4mabo


    ich würde da locker auf zehntausende Tags kommen. Mir ist das in Bezug auf DB-Belastung ein zu hohes Risiko.
    Deine Argumentation stimmt natürlich, das die Suche dann auch Beiträge anzeigt wo das Wort nur vorkommt. Da ich aber ohnehin nur Hauptwörter und keine allgemeinen Begriffe setze ist das kein allzu großes Problem und es werden trotzdem passende/ähliche Themen angezeigt.


    Walter
    Ich weiß es ist leider sehr schwer zu erklären.
    Ich habe das Tool Custom_Properities. Mit dem ordne ich jedem Artikel eine oder mehrere Regionen zu. Z.B. "Deutschland", oder "Schweiz". Es sind auch Mehrfachauswahlen möglich. Ich möchte Custom_Properities ausbauen, aber weiterhin diese Tags behalten. Demnach möchte ich diese von Custom_Properties in die Metakeys überspielen.
    Das heißt, hatte ein Artikel bei Custom_Properities die Region "Deutschland" und "Italien" soll in das metakey Feld ", Deutschland, Italien" importiert werden.


    Die in meinem ersten Beitrag 12 aufgelisteten value_ids sind die Regionen. also z.B. 58 = Deutschland usw.
    Es können aber mehrere value_ids einem Artikel zugeordnet werden, wie gerade im Beispiel beschrieben. Im obigen Beispiel wäre es dann z.b:
    value id 58 (deutschland) = article id 1
    value id 59 (italien) = article id 1


    Die Metakey Felder haben fast durchgehend alle Einträge. Das heißt es kann immer ", ..." drangehängt werden. Der Eintrag aus value_id ist nicht vorhanden, da ich in den Metakeys nie die Regionen eingetragen hatte.


    Also möglich ist es sicher, aber sehr schwer für meine begrenzten Fähigkeiten. Aber mal schauen ob ich was zusammenbringe..

  • Wenn du auf 10k Wörter kommst, dann machst da mE was falsch. Ob nun Tags oder Metakeywords - sie sollen ähnliche oder weiterführende Beiträge kennzeichnen. Mehr nicht. Alles andere macht eine Suche.
    Aber letztlich iost es deine Sache. ;)



    Axel

  • Ich habe nach dem KOmmentar von Re:later noch einmal logisch überlegt :)
    Eigentlich sollte das ja nicht so schwer sein. Ich müsste ja nur für jede der 12 value_id je eine Abfrage machen.


    mit dem Befehl das alle contend_ids die dieser value_id zugewiesen sind, in der metakey den Zusatz ", id-nr" erhalten.
    also zB:
    value id 58 = contend id 235
    value id 58 = content id 388
    value id 58 = content id 777
    usw.


    das müsste doch nicht so schwer sein, das allen in den zeilen der contend ids die der value id 58 zugeordnet sind im metakey ", 58" drangehängt wird...