Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP Artikel mit Kategorien ausgeben

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Medium
PostRank 4
PostRank 4
Beiträge: 132
Registriert: 20.08.2008, 19:00

Beitrag von Medium » 19.02.2011, 15:04

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
Tausche Bier gegen Links ;) www.brauereiweg.de

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 19.02.2011, 15:24

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

erobuilder
PostRank 2
PostRank 2
Beiträge: 30
Registriert: 28.01.2007, 16:30

Beitrag von erobuilder » 19.02.2011, 17:22

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

Medium
PostRank 4
PostRank 4
Beiträge: 132
Registriert: 20.08.2008, 19:00

Beitrag von Medium » 19.02.2011, 17:33

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 ?
Tausche Bier gegen Links ;) www.brauereiweg.de

devolo01
PostRank 8
PostRank 8
Beiträge: 843
Registriert: 13.12.2008, 17:57

Beitrag von devolo01 » 19.02.2011, 17:52

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

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 21.02.2011, 09:12

@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.

Medium
PostRank 4
PostRank 4
Beiträge: 132
Registriert: 20.08.2008, 19:00

Beitrag von Medium » 31.03.2011, 20:46

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&#40;$articel = mysqli_fetch_assoc&#40;$abfrage&#41;&#41;&#123;

	//Kategorien aus den Artikeln holen
	$responsibility = explode&#40;',', $articel&#91;category&#93;&#41;;

	//Eingabe die später von der Webseite kommen
	$auswahl = '1,2';
	$auswahlarray = explode&#40;',', $auswahl&#41;;

	foreach &#40;$responsibility as $key => $value&#41;&#123;
		foreach &#40;$auswahlarray as $key1 => $auswahlvalue&#41;&#123;
			if &#40;$value == $auswahlvalue&#41; &#123;
				echo "<tr>";
				echo "<td>$articel&#91;uid&#93; </td>";
				echo "<td>$articel&#91;title&#93; </td>";
				echo "<td>$articel&#91;text&#93;</td>";
				echo "<td>$articel&#91;category&#93;</td>";
				echo "</tr>";
                        &#125;
		&#125;

	&#125;
	if&#40;empty&#40;$auswahl&#41;&#41;&#123;
	//hier kommt der Inhalt wenn keine Kategorie ausgewählt wurde
        &#125;
&#125;
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
Tausche Bier gegen Links ;) www.brauereiweg.de

devolo01
PostRank 8
PostRank 8
Beiträge: 843
Registriert: 13.12.2008, 17:57

Beitrag von devolo01 » 01.04.2011, 19:39

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.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag