mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 08:34 Benutzername: Passwort: Auto-Login

Thema: PHP: Wie zwei Anfragen richtig kombinieren? vom 06.05.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP: Wie zwei Anfragen richtig kombinieren?
Seite: 1, 2  Weiter
Autor Nachricht
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 06.05.2008 10:58
Titel

PHP: Wie zwei Anfragen richtig kombinieren?

Antworten mit Zitat Zum Seitenanfang

Hallo zusammen,

verwende momentan folgende Query, um jeweils den letzten Eintrag in einer bestimmten Kategorie raussuchen zu lassen:

Code:

<?php
$latest_review = mysql_query("SELECT * from ccms_article where type=[b]'review' [/b]ORDER BY id DESC LIMIT 1");
while ($row = mysql_fetch_assoc($latest_review)) {

$title_start = preg_replace('/[^a-zA-Z0-9 *]/', '', $row[title]);
$title_seo = str_replace(' ', '-', $title_start);
$platform = $row[cat_id];

echo "   
<img src=\"thumbnailer.php?type=featured&image=$row[image]\">


Dazu möchte ich nun irgendwie noch eine zweite Anfrage an die Datenbank hinzufügen, um Zugriff auf die Information $box zu haben. Sowas wie:

Code:

$linked_game = mysql_query("SELECT * from ccms_gameindex where title=\"$game\" and cat_id='$platform'");
while ($row = mysql_fetch_assoc($linked_game)) {
$box = $row[box];
}


Als Erklärung, wie die Sache intern aufgebaut ist:
Jeder Artikel wird im System einem übergreifenden Datenbankeintrag zugeordnet, über den dann zusätzliche Informationen wie eben ein Bild der Verpackung ($box) verlinkt werden und nicht jedes mal für einen neuen Artikel extra mit hochgeladen werden muss (so wie mometan im ersten Beispiel mit $row[image])

Ich möchte also nun eine Anfrage erstellen, die zuerst den letzten Artikel in der entsprechenden Kategorie raussucht und anschließend noch zusätzlich die Informationen der verlinken Überkategorie ($game, $platform) hinzufügen. Damit hätte ich dann Zugriff auf sowohl $box also auch die alten Informationen aus der ersten Query.

Leider habe ich bislang keine funktionierende Möglichkeit gefunden, die beiden Anfragen richtig zu kombinieren...
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 06.05.2008 11:41
Titel

Antworten mit Zitat Zum Seitenanfang

Ich verstehe kein Wort. Trotzdem versuche ich es einfach mal.

Beschäftige dich mit Joins:

http://dev.mysql.com/doc/refman/5.1/de/join.html

Und gewöhne dir ab den Universalselektor * zu benutzen

SELECT title, cat_id, box FROM ccms_article WHERE ...


Zuletzt bearbeitet von m am Di 06.05.2008 11:41, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 06.05.2008 11:43
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Ich verstehe kein Wort.

So geht's mir auch.

Mir springen aber gleich noch ein paar Fehler ins Auge:
Code:
echo "   
<img src=\"thumbnailer.php?type=featured&image=$row[image]\">

Das & muß maskiert werden. Es muß &amp; heissen.
Und statt $row[image] solltest du $row['image'] schreiben. Andernfalls verwendest du eine undefinierte Konstante. PHP ist in standardkonfiguration da zwar fehlertolerant, aber bei strengerem error_reporting kommt es zu unschönen Meldungen.
  View user's profile Private Nachricht senden
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 06.05.2008 14:23
Titel

Antworten mit Zitat Zum Seitenanfang

Sorry, für die entstandene Verwirrung. Ich versuche es mal verständlicher zu erklären und nehme dazu ein FILMBEISPIEL zur Verdeutlichung wie die Datenbank ungefähr aufgebaut ist. In der Datenbank gibt es ZWEI unterschiedliche Datensätze, auf die ich jeweils zugreifen und ausgewählte Inhalte ausgeben lassen möchte.

In Datensatz 1 sind alle FILMTITEL (z.B. Indy 4) mit zusätzlichen Informationen zu Filmstart, Regisseur, Filmplakat etc. aufgeführt. Wann immer nun ein Artikel zu einem Film ins System gestellt wird (z.B. ein Interview mit Harrison Ford), kommen diese Informationen (Fließtext, kurze Inhaltsangabe) in Datensatz 2 und werden dann mit dem entsprechenden FILMTITEL von Datensatz 1 verbunden. Somit hat man dann, wenn man in der Filmdatenbank sich Indy 4 raussucht, Zugriff auf alle Artikel, Bilder oder Videos zum Film und muss nicht für jeden neuen Artikel immer wieder die gleichen Informationen eintragen.

Nun mal zum eigentlichen Code. Auf der Startseite lasse ich mich folgenden Code den jeweils letzten Artikel aus einer Kategorie (Datensatz 2) raussuchen:

Code:
$latest_review = mysql_query("SELECT * from ccms_article where type=[b]'review' [/b]ORDER BY id DESC LIMIT 1");
while ($row = mysql_fetch_assoc($latest_review)) {

$title_start = preg_replace('/[^a-zA-Z0-9 *]/', '', $row[title]);
$title_seo = str_replace(' ', '-', $title_start);
$platform = $row[cat_id];


Soweit gibt es damit auch kein Problem und kann auch die gewünschten Informationen ausgeben lassen. Jetzt möchte ich aber im selben Abschnitt noch zusätzlich das zum Film gehörige Filmplakat anzeigen, welches unter Datensatz 1 in der Filmdatenbank gespeichert ist.

Dazu muss ich ja nun zusätzlich die zum Film passenden Informationen des FILMTITELS aus der Datenbank holen und habe es mit diesem Code versucht:

Code:
$linked_game = mysql_query("SELECT * from ccms_gameindex where title=\"$game\" and platform='$platform'");
while ($row = mysql_fetch_assoc($linked_game)) {
$box = $row[box];
}


ZUSAMMENFASSUNG: Ich habe zwei Datensätze und möchte nun gleichzeitig Informationen aus beiden rausholen und anzeigen. Wie verbinde ich also Query 1 mit Query 2?
  View user's profile Private Nachricht senden
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Di 06.05.2008 14:26
Titel

Antworten mit Zitat Zum Seitenanfang

^^ Bitte schön Lächel

http://dev.mysql.com/doc/refman/5.1/de/left-join-optimization.html
  View user's profile Private Nachricht senden
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 07.05.2008 13:45
Titel

Antworten mit Zitat Zum Seitenanfang

Brauche noch mal was Hilfe zur Syntax mit einem JOIN Befehl. Ich möchte die zwei Datensätze zusammenbringen, die über $row[title] miteinander verbunden sind. Wie müsste die Query in dem Fall aussehen?

Also sowas wie:
Zitat:

SELECT datensatz 1 WHERE "diese und jede Bedingung"
JOIN datensatz 2
"an der Stelle, an der beide gleiche $row[title] Information haben,"
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 07.05.2008 14:07
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
SELECT a.spalte, b.spalte
FROM tabelle1 as a
INNER JOIN tabelle2 as b
ON a.title = b.title
WHERE a.spalte = bedingung
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Snifferdog

Dabei seit: 08.03.2007
Ort: Düsseldorf
Alter: 35
Geschlecht: Männlich
Verfasst Mi 07.05.2008 14:32
Titel

Antworten mit Zitat Zum Seitenanfang

m hat geschrieben:
Ich verstehe kein Wort. Trotzdem versuche ich es einfach mal.

Beschäftige dich mit Joins:

http://dev.mysql.com/doc/refman/5.1/de/join.html

Und gewöhne dir ab den Universalselektor * zu benutzen

SELECT title, cat_id, box FROM ccms_article WHERE ...


Hi,
..was spricht denn gegen den Universalsektor ? ... Ich benutze ihn eigentlich auch recht häufig ... Menno!
Ist doch sehr viel einfacher als alle Spalten einzeln auf zu schreiben * Keine Ahnung... *

Gruß
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Bilder aus zwei Ordnern kombinieren
Formular mit Bereichen und dazugehörigen Anfragen
Zwei <Forms>, Zwei Checkboxen und ein Problem
Bild und mp3 kombinieren
epub und PDF - wie kombinieren?
Flash: Schlüsselbilder kombinieren
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.