Seite 1 von 1
PHP Artikel mit Kategorien ausgeben
Verfasst: 19.02.2011, 15:04
von Medium
hier sind ja auch ein paar PHP Freaks, mein Problem:
Ich möchte gern Artikel mit Kategorien anlegen. Hab also zwei Tabellen angelegt.
Eine Tabelle articel mit
uid
title
artikeltext
category
und eine zweite Tabelle category mit
uid
title
so. Meine Ausgabe sieht dann so aus:
$sql = "SELECT * FROM articel";
$abfrage = mysqli_query($verbindung, $sql);
while($articel = mysqli_fetch_assoc($abfrage)){
echo "$articel[uid] $articel[title] $articel[text] $articel[category] <br>";
}
mysqli_free_result();
Die Ausgabe funktioniert auch soweit - nur gibt er mir bei $articel[category] halt 1 2 3 4 usw. aus ich möchte hier aber den Titel der category stehen haben.
Mir fällt einfach nichts mehr ein - kann mir vielleicht einer helfen.
Danke
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 19.02.2011, 15:24
von Synonym
Nun, Du fragst ja auch die Tabelle "articel" ab. In der wird "category" wohl die id sein, oder?
Also die selbe id wie die "uid" aus der Tabelle "category".
Also musst Du die beiden Tabellen auch verbinden, denn der Titel der Kategorie steht ja in der anderen Tabelle....
Stichwort -> JOIN
https://dev.mysql.com/doc/refman/5.1/de/join.html
Verfasst: 19.02.2011, 17:22
von erobuilder
Naja bei der Easy Abfrage solltest Ihm ein ganzes Kapitel über join noch nicht antun
SELECT c.title, a.title, a.artikeltext FROM category c, article a WHERE c.uid = a.category
Verfasst: 19.02.2011, 17:33
von Medium
Code: Alles auswählen
Nun, Du fragst ja auch die Tabelle "articel" ab. In der wird "category" wohl die id sein, oder?
Also die selbe id wie die "uid" aus der Tabelle "category".
richtig erkannt
Code: Alles auswählen
Naja bei der Easy Abfrage solltest Ihm ein ganzes Kapitel über join noch nicht antun
he he danke

mir hat nur der Hinweiß JOIN gefehlt - hab mich durch google gelesen und bin dann auf diese Lösung hier gekommen:
SELECT * FROM articel JOIN category ON articel.category = category.uid
kann man das so schreiben?
also so
echo'<table border="1">';
//$sql = "SELECT * FROM articel";
$sql = "SELECT * FROM articel JOIN category ON articel.category = category.uid";
$abfrage = mysqli_query($verbindung, $sql);
while($articel = mysqli_fetch_assoc($abfrage)){
echo "<tr>";
echo "<td>$articel[uid] </td>";
echo "<td>$articel[title] </td>";
echo "<td>$articel[title_cat] </td>";
echo "<td>$articel[text]</td>";
echo "</tr>";
}
echo "</table>";
hab jetzt aber schon das nächste Problem - wie kann ich einem Artikel jetzt mehrere Kategorien zuordnen ?
Verfasst: 19.02.2011, 17:52
von devolo01
Hi,
ja das kannst so schreiben.
Um auf deine Zweite Frage zu kommen solltest dich einmal mit dem Relationalen Datenbank Modell bekannt machen.
Hier stellt sich die Frage der Beziehungen.
Sprich 1:1, 1:n, oder M:N
Eine Tabelle articel mit
uid
title
artikeltext
category
und eine zweite Tabelle category mit
uid
title
in deinem Fall währe es eine m:n Beziehung sprich. Sprich ein Artikel kann mehreren Kategorieren angehören aber eine Kategorie kann nun auch mehrere Artikel beherbergen.
So laut M:N brauchst nun ne dritte Tabelle:
Hier ein Beispiel:
Code: Alles auswählen
uid_Artikel -------title ----- artikeltext ---- category
1 ----------- test1 ----------- blA ----------- 1
2 ----------- test2 ----------- blA ----------- 2
3 ----------- test3 ----------- blA ----------- 3
uid_Categorie title
1 ----------- Cat1
2 ----------- Cat2
3 ----------- Cat3
id uid_Categorie uid_Artikel
1 -----------Cat1 ----------- 2
2 -----------Cat2 ----------- 1
3 -----------Cat3 ----------- 2
Laut dem Beispiel gehört Artikel 2 nun zu den Kategorien Cat1 und Cat3 und Artikel 1 zu Cat 2
Verfasst: 21.02.2011, 09:12
von Synonym
@erobuilder
Warum denn nicht? Wenn man alles vorkaut, dann lernt er es doch nie. Zudem stehen da genug kleine Beispiele drinnen.
Und nun... Ist nämlich das nächste Problem schon da.... devolo01 hat es schon richtig beschrieben und somit sind wir wieder beim JOIN, eben über zwei zusätzlich Tabellen.
Verfasst: 31.03.2011, 20:46
von Medium
so hier nochmal ne Frage an die Freaks

- bin etwas weiter
wenn ich jetzt mehrer Kategorien Anzeigen möchte also z.B. $auswahl = '2,1,3';
Dachte ich mir bauste aus dem foreach eine Verschachtelung - funktioniert auch irgendwie - nur werden jetzt in der Ausgabe Artikel doppelt angezeigt.
Code: Alles auswählen
while($articel = mysqli_fetch_assoc($abfrage)){
//Kategorien aus den Artikeln holen
$responsibility = explode(',', $articel[category]);
//Eingabe die später von der Webseite kommen
$auswahl = '1,2';
$auswahlarray = explode(',', $auswahl);
foreach ($responsibility as $key => $value){
foreach ($auswahlarray as $key1 => $auswahlvalue){
if ($value == $auswahlvalue) {
echo "<tr>";
echo "<td>$articel[uid] </td>";
echo "<td>$articel[title] </td>";
echo "<td>$articel[text]</td>";
echo "<td>$articel[category]</td>";
echo "</tr>";
}
}
}
if(empty($auswahl)){
//hier kommt der Inhalt wenn keine Kategorie ausgewählt wurde
}
}
Ich habs auch schon mit GROUP BY probiert
$sql = "SELECT uid, title, text, category FROM articel GROUP BY uid, title";
funktioniert aber leider auch nicht
vielleicht kann mir einer helfen - danke
Verfasst: 01.04.2011, 19:39
von devolo01
Wie bereits in der PN beantwortet, musst die Tabellen jetzt miteinander verknüpfen via Join. Entsprechende Link hat dir Synonym schon gepostet. und eine Beispiel Abfrage hast via PN.
Sollten dennoch dopplungen auftreten setzt nach dem Select noch ein
distinct ein.