Zur Navigation

Zwei Tabellen vergleichen und Daten ordnen

1 Horst_Braun

Hallo, ich bin es wieder. Folgendes Problem:

Ich habe zwei Tabellen (MySQL):
1: Hier stehen die Besucherzahlen des jeweiligen Artikel aus Tabelle 2.
2: Artikel (Überschriften usw)

Ich möchte, dass mir aus der Tabelle 2 die Artikelüberschriften angezeigt werden geordnet nach Besucherzahl aus Tabelle 1.

Meine Ersten Ansatz :
SELECT Artikelüberschrift FROM tabelle2 WHERE besucherzahl > NOW() ORDER BY besucherzahl ASC LIMIT 10;

Ich weiß, dass dies nicht korrekt ist. Die Tabelle müssen doch auch erst irgendwie eingelesen werden, oder?

Bitte wieder einmal um Hilfe.

Danke.

14.06.2011 15:01 | geändert: 14.06.2011 15:01

2 Jörg Kruse

Du willst hier anscheinend eine Abfrage über zwei Tabellen machen - genauer gesagt eine JOIN-Abfrage. Dazu benötigst du ein Datenfeld, welches in beiden Tabellen vorhanden sein muss, und über welches du die Tabellen vernüpfen kannst. In deinem Beispiel könnte dies ein Datenfeld `Artikelnummer` sein, welches idealerweise zugleich als ID von tabelle1 fungiert. Die Abfrage könnte dann so ausschauen:

SELECT t2.Artikelüberschrift
FROM tabelle2 AS t2
INNER JOIN tabelle1 AS t1
ON t2.Artikelnummer = t1.Artikelnummer
ORDER BY t1.besucherzahl
LIMIT 10;

14.06.2011 17:16

3 Horst_Braun

Hallo,

meine eingebauter PHP Code sieht jetzt so aus. Ich wollte erstmal probieren ob es denn so geht:

{php}
$test = SELECT t2.header FROM pap_ppx07_papoo_language_article AS t2 INNER JOIN pap_ppx07_papoo_repore AS t1 ON t2.lan_repore_id = t1.reporeID ORDER BY t1.count LIMIT 10;
echo "$test";
{/php}

Muss ich ein Array anlegen? Oder ist der Ansatz mit der Variable total falsch?

MfG

15.06.2011 22:37

4 Jörg Kruse

Um in PHP eine MySQL-Datenbankabfrage machen zu können, musst du die dortigen MySQL-Funktionen verwenden:

http://www.php.net/manual/de/ref.mysql.php

Eine Abfrage setzt du mit mysql_query() ab; mit mysql_fetch_array() könntest du dann die Ergebnisse in ein Array speichern, welches du dann in einer Schleife auslesen kannst.

Gegebenenfalls musst du vor der Abfrage noch mit mysql_connect() eine Datenbankverbindung öffnen und mit mysql_select_db() eine Datenbank auswählen.

15.06.2011 23:16 | geändert: 15.06.2011 23:17

5 Horst_Braun

hallo,

das funktioniert jetzt erstmal alles so wie ich das möchte:

{php}
$result = mysql_query("SELECT t2.header FROM pap_ppx07_papoo_language_article AS t2 INNER JOIN pap_ppx07_papoo_repore AS t1 ON t2.lan_repore_id = t1.reporeID WHERE t2.lang_id=1 && t1.cattextid = 18 && t2.lan_repore_id != 11 ORDER BY t1.count DESC LIMIT 10;");
$id = 0;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $id = $id + 1;
    printf ("$id: %s  <br />", $row[0], $row[1]);
}

mysql_free_result($result);
{/php}

Nun möchte ich mir bei printf noch ein den Inhalt eines anderen Tabellenfeldes aus Tabelle 2 mit anzeigen lassen. Also immer das Feld der aktuelle Schleife. Wie bekomme ich das sauber hin?

Vielen Dank.

16.06.2011 11:36

6 Jörg Kruse

Du musst das zweite Feld natürlich erst noch abfragen:

SELECT t2.header, t2.field2 FROM pap_ppx07_papoo_language_article /* etc. */

Das würde dann $row[1] entsprechen. In printf() könntest du das über ein zweites %s einbauen:

printf ("$id: %s, %s<br />", $row[0], $row[1]);

Bei Strings solltest du gegebenenfalls noch htmlspecialchars() anwenden, damit HTML-Steuerzeichen maskiert werden:

printf ("$id: %s, %s<br />", htmlspecialchars($row[0]), htmlspecialchars($row[1]));

16.06.2011 15:21 | geändert: 16.06.2011 15:22

7 Horst_Braun

Super! Vielen vielen Dank.
{php}
$result = mysql_query("SELECT t2.url_header, t2.header FROM pap_ppx07_papoo_language_article AS t2 INNER JOIN pap_ppx07_papoo_repore AS t1 ON t2.lan_repore_id = t1.reporeID WHERE t2.lang_id=1 && t1.cattextid = 18 && t2.lan_repore_id != 11 ORDER BY t1.count DESC LIMIT 10;");
$id = 0;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $id = $id + 1;
    printf ("$id: <a href=\"/pc-screenshots/%s.html\">%s</a><br /><br />", $row[0], $row[1]);
}

mysql_free_result($result);
{/php}

Mein Script funktioniert jetzt so wie es soll, aber eben nur auf deutsch, denn ich greife laut "t2.lang_id=1" nur auf die deutschen Artikel. Aus dieser 1 müsste ich noch eine Variable machen, welche je nach Browsersprache oder eben Seitensprache 1 bzw. 2 wird.

Hast du dafür auch noch einen Ansatz? Ich brächte eigentlich nur eine Schleife vor meinem Script:
If Seitensprache de dann Script1
Else Script2 

16.06.2011 15:44

9 Forum

2 Beiträge aus diesem Thread wurden in einen neuen Thread verschoben:

Datumsformat umwandeln

27.06.2011 14:48

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]