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

INNER JOIN php Frage an die Freaks ;)

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 » 05.04.2011, 15:35

Hallo,

habt mir ja schon mal geholfen ;)

ich habe Artikel bzw. Produkte -> Tabelle tx_item_produkt
ich habe Kategorien -> Tabelle tx_item_Cat
ind eine Hilfstabelle -> tx_item_produkt_category_mm

über die Variable $auswahl möchte ich später stuern welche Kategorien angezeigt werden sollen.

in tx_item_produkt_category_mm wird jedes Artikel-Kategorie-Verhältnis in eine Zeile geschrieben

Bild

mein Code sieht so aus:

Code: Alles auswählen

			$sql = "SELECT *
            FROM tx_item_produkt
            INNER JOIN tx_item_produkt_category_mm ac ON ( ac.uid_local = tx_item_produkt.uid )
			INNER JOIN tx_item_Cat c ON ( c.uid = ac.uid_foreign )";

            if ($auswahl == '') {
                        }else {
                        $sql .="WHERE ac.uid_foreign IN ($auswahl)";
            }

			$abfrage = mysqli_query($verbindung, $sql);

			while($articel = mysqli_fetch_assoc($abfrage)){

                        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;
			echo "</table>";
			mysqli_free_result&#40;&#41;;
leider gibt er mir wieder Artikel die in mehreren Kategorien sind sopplet usw. aus :(
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.


Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 07.05.2011, 06:22

Was steht denn bei dein Skript in der Variable: $auswahl? Sind dies Zahlen mit Komma getrennt? Gegebenenfalls könntest du mit distinct bzw. GROUP BY was machen. Ich finde auf den ersten Blick deine Bezeichnungen von den Spalten sehr unpassend.

Verwende für die Zukunft nicht uid für id. Denn uid kann man immer dazu interpretieren, dass dies eine User-ID ist. Desweiteren würde ich an deiner Stelle auch Tabellennamen nie abkürzen wie zum Beispiel "tx_item_produkt_category_mm ac" dadurch verliert man einfach den Überblick. Du kannst dies im Nachhinein sobald du fertig bist, abändern.

Schreibe lieber:

... (`tx_item_produkt_category_mm`.`uid_local` = `tx_item_produkt`.`uid` ) ...


und lasse dir mal $sql bevor du die Abfrage von der Mysql Datenbank machst ausgeben. Bei * solltest du noch angeben, welche Tabelle du hier meinst. Beispiel:

`tx_item_produkt_category_mm`.*
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 08.05.2011, 10:22

SELECT DISTINCT ... !

Outman
PostRank 6
PostRank 6
Beiträge: 394
Registriert: 03.12.2004, 22:55
Wohnort: Orlamünde

Beitrag von Outman » 08.05.2011, 15:45

nerd hat geschrieben:SELECT DISTINCT ... !
hatte ich bereits geschrieben :wink:
Webhosting Partnerprogramm mit 2 Refebenen, PHP Webspace mit .de Domain ab 2 Euro, Zusätzlich suche ich Linkpartner zum Thema "Webmaster". Suchst du einem PHP Programmierer?

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 08.05.2011, 22:32

stimmt. liegt daran das ich grundsaetzlich nur die erste zeile pro beitrag lese. spart ne menge zeit :)

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 15.05.2011, 13:14

1.) tx_item_produkt_category_mm hast Du weil jeder Artikel auch in mehreren Kategorien stehen kann, korrekt?

2.) Warum INNER JOIN? Gibt es Artikel ohne Kategorien? Wenn nein wäre ein simpler JOIN die bessere Wahl bzw. noch besser die implizite Schreibweise:

Code: Alles auswählen

// alle artikel aus allen kategorien
$sql = "SELECT *
				FROM &#40;tx_item_produkt p, tx_item_produkt_category_mm pc, tx_item_Cat c&#41;
				WHERE pc.uid_local = p.uid
				AND c.uid = pc.uid_foreign";
// nur aus bestimmten kategorien
if &#40;$auswahl&#41; &#123; // wenn $auswahl == '' dann ist das gleich false ;&#41;
	$sql .= ' AND pc.uid_foreign IN&#40;' . mysql_real_escape_string&#40;$auswahl&#41; . '&#41;';
&#125;
3.) Ich finde Deine Spalten und Tabellennamen reichlich verwirrend. Was soll der Quatsch mit der uid? Nenn das doch einfach product_id und cat_id und nicht local und foreign.
Ich kaufe Dein Forum!
Kontaktdaten

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag