php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #31 (permalink)  
Alt 03-10-2006, 12:09
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

@tbt: du brauchst aber 2 Tables, richtig?
Mit Zitat antworten
  #32 (permalink)  
Alt 03-10-2006, 13:11
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

ja, ich brauche 2 Tabellen
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #33 (permalink)  
Alt 03-10-2006, 13:26
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

@tbt: habe mich wohl falsch ausgedrückt. Ich meinte, man braucht grundsätzlich 2 Tabellen, um mit einem SQL-Statement rekursiv hochzugehen, richtig?
Mit Zitat antworten
  #34 (permalink)  
Alt 03-10-2006, 20:26
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

1 Tabelle reicht da doch

select *
from tab a1
inner join tab a2 on ( ... )
inner join tab a3 on ( ... )
...
inner join tab an on ( ... )
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #35 (permalink)  
Alt 03-10-2006, 21:20
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

@tbt: so wie ich das sehe, pro inner join = eine ebene, richtig?
SELECT b.* FROM `bb_content` b INNER JOIN bb_content bb ON (b.c_id=bb.c_parentid)
so würde ich alle ebenen bekommen, das will ich aber nicht, sondern nur von einer bestimmten unterebene nach oben alle ebenen.
Mit Zitat antworten
  #36 (permalink)  
Alt 07-11-2006, 19:37
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

@tbt: wie machst du das beim Löschen, wenn du von einer oberen Ebene alle nach unten gehenden Ebenen löschen willst? Dein Delete wird doch sicher ein Join haben oder? Wenn ja, wie sieht der aus?
Mit Zitat antworten
  #37 (permalink)  
Alt 07-11-2006, 20:55
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
function deletePoint$point ) {
        
// Infos des Menü-Punkts auslesen
        
$tmp $this->db->single' SELECT sort_i, parent_i, level_i FROM '.$this->menu.'
                                    WHERE '
.$this->menuid.' = '.$point );
        
// alle Unterpunkte suchen und loeschen
        
$this->db->select'    SELECT child_i
                                FROM '
.$this->menumenu.'
                                WHERE parent_i = '
.$point'sub' );
        if( 
$this->db->rows'sub' ) ) {
            
$t = array();
            while( 
$row $this->db->fetch'sub' ) ) {
                
$t[] = $row['child_i'];
            }
            
$this->db->free'sub' );
            
$this->db->query'    DELETE FROM '.$this->menumenu.'
                                WHERE child_i IN ( '
.implode', '$t ).' ) ' );
            
$this->db->query'    DELETE FROM '.$this->menu.'
                                WHERE '
.$this->menuid.' IN ( '.implode', '$t ).' ) ' );
        }
        
// Punkt loeschen
        
$this->db->query'    DELETE FROM '.$this->menumenu.'    WHERE child_i = '.$point );
        
$this->db->query'DELETE FROM '.$this->menu.' WHERE '.$this->menuid.' = '.$point );
        
// Menü neu sortieren
        
$this->db->query'    UPDATE '.$this->menu.' SET
                                sort_i = sort_i - 1
                            WHERE
                                sort_i > '
.$tmp['sort_i'].'
                                AND parent_i = '
.$tmp['parent_i'].'
                                AND level_i = '
.$tmp['level_i'] );
        
// Uebergeordnete ID zurückgeben
        
return $tmp['parent_i'];
    } 
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #38 (permalink)  
Alt 07-11-2006, 21:18
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

Habs mit 2 Querys gelöst:

PHP-Code:
$this->_db->query("DELETE c, cp FROM {prefix}content_structure cs
INNER JOIN {prefix}content c ON ( cs.c_id='"
.$i."' AND (c.c_id = cs.child_id OR c.c_parentid = cs.child_id))
LEFT JOIN {prefix}content_properties cp ON (cp.c_id=c.c_id)
LEFT JOIN {prefix}permissions p ON (p.id=c.c_id AND p.`module`='content')"
);
                    

$this->_db->query("DELETE cs, cs2 FROM {prefix}content_structure cs 
INNER JOIN {prefix}content_structure cs2 ON (cs2.c_id=cs.child_id)
WHERE cs.c_id='"
.$i."'"); 
Mit Zitat antworten
  #39 (permalink)  
Alt 22-12-2007, 01:45
MeisterM
 Newbie
Links : Onlinestatus : MeisterM ist offline
Registriert seit: Dec 2007
Beiträge: 6
MeisterM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, dass ich den Beitrag nochmal nach oben hole. Aber ich wurde auf diesen Verwiesen. Euer Code klappt ganz gut, doch irgendwie wird bei mir nur die höchste Ebene angezeigt. Allerdings will ich (OHNE Benutzerrechte einfach nur so) alle aufgeklappten Ebenen anzeigen. Könnt ihr mir da weiterhelfen. Ich habe folgende Tabellenstruktur gewählt: (Aus Beitrag 1)


menu
========
menu_id ( Menupunkt )
parent_id ( übergeordneter Menupunkt, oder 0 wenn ganz oben )
level ( Baumtiefe )
sort ( Sortierung bei nebeneinander liegenden Menupunkten )

Reicht das? Habe auch mit den zwei Tabellen ausprobiert. Klappt aber nicht so ganz. Wie bekomm ich das möglichst Performat hin, dass er mir alle benötigten Ebenen aufklappt. (Wie Windows Explorer)

Gruß
Holger
Mit Zitat antworten
  #40 (permalink)  
Alt 26-04-2009, 22:08
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
menu_menu
=========
menu_id ( Menupunkt )
child_id ( alle untergeordneten Menupunkte )
Ich verstehe nicht, was genau die Tabelle eigentlich macht.
Kann mir das jemand erklären?

Wäre sehr dankbar dafür
Mit Zitat antworten
  #41 (permalink)  
Alt 26-04-2009, 22:17
Benny-one
 Master
Links : Onlinestatus : Benny-one ist offline
Registriert seit: Jan 2002
Ort: Fulda
Beiträge: 5.700
Benny-one ist zur Zeit noch ein unbeschriebenes Blatt
Benny-one eine Nachricht über ICQ schicken
Standard

In der Tabelle speicherst du für jede Ebene sämtliche IDs der darunter folgenden Ebenen.

Beispiel:

Code:
Ebene 1.0.0 - ID 1
Ebene 1.1.0 - ID 2
Ebene 1.2.0 - ID 3
Ebene 1.1.1 - ID 4
Ebene 1.1.2 - ID 5
Ebene 2.0.0 - ID 6
Ebene 2.2.0 - ID 7
In der Tabelle würdest du jetzt folgende Werte haben

Code:
menu_id - child_id
1.........1
1.........2
1.........3
1.........4
1.........5
2.........2
2.........4
2.........5
3.........3
4.........4
5.........5
6.........6
6.........7
7.........7
Mit Zitat antworten
  #42 (permalink)  
Alt 26-04-2009, 23:29
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

die Tabelle verkettet alle Eltern mit allen Kindern und umgedreht
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #43 (permalink)  
Alt 04-05-2009, 17:29
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ah, ok...
Danke für die Antworten!

Wie muss denn die Abfrage aussehen, wenn ich keine Rechteprüfung möchte?
Nur die Ausgabe eines Menus...

So sieht mein DB-Design aus, aber ich komme nicht auf die Abfrage. Habe nichtmal nen Ansatz

Zitat:
--
-- Tabellenstruktur für Tabelle `menus`
--

CREATE TABLE IF NOT EXISTS `menus` (
`menu_id` mediumint(8) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`menu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Daten für Tabelle `menus`
--

INSERT INTO `menus` (`menu_id`, `name`) VALUES
(1, 'Ebene 1.0.0'),
(2, 'Ebene 1.1.0'),
(3, 'Ebene 1.2.0'),
(4, 'Ebene 1.1.1'),
(5, 'Ebene 1.1.2'),
(6, '2.0.0'),
(7, '2.2.0');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `menu_menu`
--

CREATE TABLE IF NOT EXISTS `menu_menu` (
`id` mediumint(8) NOT NULL auto_increment,
`parent_id` mediumint(8) NOT NULL,
`child_id` mediumint(8) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

--
-- Daten für Tabelle `menu_menu`
--

INSERT INTO `menu_menu` (`id`, `parent_id`, `child_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 4),
(5, 1, 5),
(6, 2, 2),
(7, 2, 4),
(8, 2, 5),
(9, 3, 3),
(10, 4, 4),
(11, 5, 5),
(12, 6, 6),
(13, 6, 7),
(14, 7, 7);

Geändert von Seggl-hoch-drei (04-05-2009 um 18:07 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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