Autor |
Nachricht |
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Di 06.05.2008 11:58
Titel PHP: Wie zwei Anfragen richtig kombinieren? |
|
|
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...
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Di 06.05.2008 12:41
Titel
|
|
|
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 12:41, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 06.05.2008 12:43
Titel
|
|
|
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ß & 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.
|
|
|
|
|
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Di 06.05.2008 15:23
Titel
|
|
|
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?
|
|
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
|
|
|
|
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mi 07.05.2008 14:45
Titel
|
|
|
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,"
|
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 07.05.2008 15:07
Titel
|
|
|
Code: | SELECT a.spalte, b.spalte
FROM tabelle1 as a
INNER JOIN tabelle2 as b
ON a.title = b.title
WHERE a.spalte = bedingung |
|
|
|
|
|
Snifferdog
Dabei seit: 08.03.2007
Ort: Düsseldorf
Alter: 35
Geschlecht:
|
Verfasst Mi 07.05.2008 15:32
Titel
|
|
|
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 ...
Ist doch sehr viel einfacher als alle Spalten einzeln auf zu schreiben
Gruß
|
|
|
|
|
|
|
|
Ä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
|
|