php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.03.2005, 21:13  
Gast
 
Beiträge: n/a
Standard [Erledigt] Menülinks in Kategorien per Left join

Hi

Ich habe folgendes Problem.

Und zwar habe ich mir ein menü mit mehren Kategorien gemacht und mit mehren links.

Natürlich könnt ich jetzt noch eine query in die while schleife machen und so geht ja auch aber ist auch sehr resourcen fresend. Nun wollte ich das ganze per left join machen.

Doch leider wird nun nur noch 1 link pro kategorie angezeigt dabei habe ich 2 kategorien und pro cat derzeit 2 links drin.

Hoffe ihr könnt mir helfen hier mal meine Db abfrage.

PHP-Code:
<?php
$verg
=$db->query("SELECT * FROM aquila".$pr."_acp_menueitems LEFT JOIN aquila".$pr."_acp_menuecats mi USING (id) where catid=mi.id");

while(
$erg=$db->fetch_array($verg)) {
$mcatname $erg['name'];
$mcatid $erg['id'];
$item $erg['iname']; 
eval (
"\$menue .= \"".$tpl->getacptemplate("menue")."\";");
eval (
"\$menue .= \"".$tpl->getacptemplate("menue_item_bit")."\";"); 
eval (
"\$menue .= \"".$tpl->getacptemplate("menue_end")."\";");

?>
Und wenn ich des where wegmache dann kommen soviel kategorien wie links in der tabelledrin stehen aber halt ohne name und wieder mit nur einem link drin. Dabei sollen ja nur soviel cats erscheinen wie eingetragen sind und in denn Cats immer soviel links wie halt der kategorie zugeordnet sind.

Die Tabellen Struktur ist so:

In der tabelle acp_menuecats stehen die ganzen kategorien mit einer eindeutigen id.
In der Tabelle acp_menueitems stehn die ganzen links drin diese haben ebenfalls eine eindeutige id. Die werden aber über die id der Kategorie die bei ihnen ihn der spalte catid drin steht zugeordnet.

Ebenfalls haben beide Tabellen eine spalte namens name für denn namen des Links bzw kategorie. Dort gibt es aber auch leider Probleme udn zwar werden statt die Linknamen die Kategorie Namen in der Kategorie angezeigt. Dies muss man doch auch irgendwie bestimmen könne welchen namen man meint.

Hoffe ihr könnt mir helfen.

Gruß Alex

PS: Wenn ihr eine bessere, leichtere und eine die nicht viel Resourcen benötigt kennt, dann bin ich gerne offen diese zu verwenden.

Bitte stört euch nicht an der Template ausgabe diese wird noch in eine Ausgabe abgeändert.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.03.2005, 10:18  
Gast
 
Beiträge: n/a
Standard

Hi!

Da wird es schwer nur mit einem Query zu arbeiten. Ich würde da zwei Abfragen machen. Der erste durchläuft die Kategorien und mit der aktuellen ID werden die Menüpunkte ausgegeben.

Gruß
Iceman
  Mit Zitat antworten
Alt 08.03.2005, 11:38  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Grundsätzlich sollte das kein Problem sein, die Daten mit einer Abfrage zu holen. Wenn du nichr "SELECT * FROM ..." schreiben würdest, hätte man auch etwas mehr Informationen. Ich habe selber noch nie einen JOIN mit USING benutzt, aber so wie ich das verstehe, macht er hier einen JOIN über die id, d.h. ..menucats.id = ..menuitems.id. Und das ist vermutlich nicht, was du willst. Und wahrscheinlich brauchst du einen INNER JOIN. Versuchs mal auf diese Art:
PHP-Code:
<?php
$query 
"SELECT i.id, i.iname, c.name 
                    FROM aquila" 
$pr "_acp_menueitem i
                    INNER  JOIN aquila" 
$pr "_acp_menuecats c on i.catid = c.id";
$verg=$db->query($query);
?>
Um mehr dazu zusagen, bräuchte ich allerdings genauere Angaben über den Tabellenaufbau (tabelarisch, nicht als Roman).
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 08.03.2005, 12:01  
Gast
 
Beiträge: n/a
Standard

Hi!

Dann hat man aber noch nicht die Unterscheidung zwischen den Kategorien,
die er mit ausgeben möchte, wie ich das verstanden habe.

Gruß
Iceman
  Mit Zitat antworten
Alt 08.03.2005, 13:46  
Gast
 
Beiträge: n/a
Standard

Ok also hab dir mal hier die Sql abfargen zum erstellen von den Tabellen

Für die Links:
Code:
CREATE TABLE `aquila1_acp_menueitems` (
  `id` tinyint(3) NOT NULL auto_increment,
  `catid` tinyint(3) NOT NULL default '0',
  `name` varchar(50) collate latin1_general_ci NOT NULL default '',
  `link` varchar(100) collate latin1_general_ci NOT NULL default '',
  `condition` varchar(100) collate latin1_general_ci NOT NULL default '',
  `mode` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=6 ;
Und hier für die Kategorien:

Code:
CREATE TABLE `aquila1_acp_menuecats` (
  `id` tinyint(3) NOT NULL auto_increment,
  `name` varchar(100) collate latin1_general_ci NOT NULL default '',
  `mode` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

Wie schon gesagt enthält die Spalte catid eien id von der spalte id von der menücat tabelle.

Über die soll halt zugeordnet werden.

Und wichtig ist noch beie Tabellen haben eine spalte namen namen.

Gruß Alex
  Mit Zitat antworten
Alt 08.03.2005, 14:08  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Und was davon willst du angezeigt haben? Nimm meinen Code und passe die Attribute entsprechend an.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 11.03.2005, 20:43  
Gast
 
Beiträge: n/a
Standard

Hi leider geht es mit deinem Code auch nciht udn zwar es werden nun die Kategroien so oft angezeigt wie auch Links zugeordnet sind. Und auch in jeder Kategorie nur 1 Link drin.
  Mit Zitat antworten
Alt 12.03.2005, 15:37  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Speedrider
Hi leider geht es mit deinem Code auch nciht udn zwar es werden nun die Kategroien so oft angezeigt wie auch Links zugeordnet sind. Und auch in jeder Kategorie nur 1 Link drin.
Wahnsinnige Aussage: In jeder Kategorie ist ein Link drin und es werden die Kategorien so oft angezeigt wie Links drin sind. Was denn jetzt?
Die logische Folge davon ist, dass du zu jeder Kategorie genau einen Link erfasst hast. Das ist die einzige Möglichkeit, dass deine Aussage logisch zutreffen kann.
Ausserdem habe ich keine Lust mehr Fragen zu beantworten, die dem Verfasser offensichtlich zu unwichtig sind, um den Text nochmals kurz durchzulesen, und die gröbsten Fehler zu verbessern.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 12.03.2005, 20:39  
Gast
 
Beiträge: n/a
Standard

Hi

Also nun nochmal, vielleicht klappt es nun.

Ich habe 2 Kateorien und insgesammt 4 Links. Beide Kategorien haben 2 Links zugeordnet.

Um nun das Problem zu verdeutlichen zeig ich euch mal den aufbau nun.


So solls ausehen:

Einstellungen
- Globale Einstelungen
- News Einstellungen

Module
- Hinzufügen
- Bearbeiten

Und so sieht es mit dem obigen Code aus:

Einstellungen
- Globale Einstellungen

Einstellungen
- News Einstellungen

Module
- Hinzufügen

Module
- Bearbeiten


Hoffe das Schaubild kann nun das Problem etwas verdeutlichen.


Gruß Alex

PS: Ich hoffe diesmal sind nicht so viele Rechtschreibfehler drin.
Muss mich erst an meine neue Tastatur gewöhnen, dort sitzen die Tasten etwas anderst.
  Mit Zitat antworten
Alt 12.03.2005, 21:31  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Speedrider
dort sitzen die Tasten etwas anderst.
fade entschuldigung ... bleib wenigstens ehrlich und gib nicht einem in der evolution weit über dir stehenden kunstwerk die schuld an deiner faulheit.

zu deinem problem:

die sql-abfrage ist schonmal korrekt - es ist klar - du bekommst die 'ober'-kategorien in jeder zeile nochmal. da jede relationale datenbank mit SETS arbeitet, wird's ja schwierig, verschachtelte arrays oder objekte zurückzugeben.

das kannst du aber mit php lösen.

PHP-Code:
<?php
$query 
"SELECT i.id mid, i.iname as mname, c.id as cid, c.name as cname
    FROM aquila" 
$pr "_acp_menueitem i
                    INNER  JOIN aquila" 
$pr "_acp_menuecats c on i.catid = c.id"

$result mysql_query($query);

echo 
'';
$navi = array();
while(
$data mysql_fetch_assoc($result)) {
    if(!isset(
$navi[$data['cid']])) { // nur beim ersten mal den hauptmenüpunkt anzeigen.
         
echo '[b]' $data['cname']. '[/b]
'
."\n";
         
$navi[$data['cid']] = true;
   }
    echo 
' -- ' $data['mname'] . "
\n"
// untermenüpunkt
}

echo 
'';
?>
alles klar?
axo ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] LEFT JOIN auf mehrere Spalten nystagmussen Datenbanken 3 22.07.2008 08:05
WHERE-Clause im Left Join cycap Datenbanken 2 06.11.2007 11:06
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
LEFT OUTER JOIN auf Nicht-Tabelle inu Datenbanken 15 29.03.2007 20:21
[solved] LEFT JOIN - #1066 - Not unique table/alias moose Datenbanken 6 12.12.2006 06:41
[gelöst] LEFT JOIN und trotzdem nicht alle Sätze da?!? stefanjann Datenbanken 3 24.10.2006 11:32
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
Left outer join, timestamps php-newbie83 Datenbanken 29 27.04.2006 09:29
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
[Erledigt] LEFT JOIN funtkioniert nicht richtig Datenbanken 3 19.10.2005 17:38
[Erledigt] LEFT JOIN Problem Datenbanken 11 21.03.2005 16:36
[Erledigt] left outer join mit bedingung Datenbanken 2 04.03.2005 00:52
den letzte(grösten) eintrag aus LEFT JOIN Datenbanken 2 24.07.2004 18:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php left zu weit links, kategorie query left join

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:00 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.