php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.11.2011, 13:11  
Neuer Benutzer
 
Registriert seit: 27.05.2011
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
tramp befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] RECURSIVE query

Hallo,

ich bin bei meiner Suche im Netz darauf gestoßen, dass es möglich ist Recursive Querys abzusetzen. Nach weiterem google'n habe ich mir die Syntax herausgesucht und wollte die auf meine Menu - Tabelle anwenden:

t_menu_item
--------------------------------
id | f_menu_item_id | title | path
--------------------------------
1 | null | main| /
2 | 1 | foo | /foo
3 | 1 | test | /test
4 | 2 | bar | /foo/bar
--------------------------------

Mein Query dazu sieht wie folgt aus:
PHP-Code:
WITH RECURSIVE
    abcde
(idf_menu_item_id) AS(
        
SELECT 
            id
f_menu_item_idtitlepath
        FROM 
            menu_item
        WHERE 
            f_menu_item_id 
null

    UNION ALL

        SELECT 
            r_i
.idt_i.f_menu_item_id
        FROM 
            abcde 
AS r_imenu_item AS t_i
        WHERE 
            t_i
.f_menu_item_id r_i.id
)
SELECT 
    id
f_menu_item_id 
FROM 
    abcde 
Ich bekomme aber in phpMyAdmin(3.2.4; sql: 5.1.41), wenn ich den Query absetze immer die Meldung das der Query Fehler enthält. Funktioniert die Rekursion überhaupt in diesen Versionen? Wenn Ja kann mir jmd sagen wo das Problem/ der Fehler liegt?

Vielen Dank im vorraus.
tramp ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.11.2011, 13:37  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

in welchen Versionen?
chorn ist offline   Mit Zitat antworten
Alt 28.11.2011, 14:10  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

also ein schneller Blick ins Mysql Handbuch brachte bisher nur den Verweis auf stored procedures ....

von daher schau dir für dein Vorhaben mal nested sets an ...

Zitat:
Zitat von MYSQL_REFERENZ
Posted by erick ringot on March 31 2011 6:26am [Delete] [Edit]

RECURSION / RECURSIVE SELECT :

1) Let `task` be a MySql table containing at least 2 columns: id (primary key), pid (parent id - may be NULL) so that the rows form a classic tree structure.

2) Suppose you want to extract the tree relative to a particular actual id (constituted by itself and all its spawns) so that you need a recursive select which is unfortunately not implemented in MySql.

You can proceed by writing a recursive function as below.

CREATE PROCEDURE `TASKTREE`(tid INT UNSIGNED, flag BOOLEAN)
BEGIN
--
-- TASKTREE(id,flag)
-- recursive function, must be called with flag=FALSE
-- tid is the task (row) id
-- creation of a temporary table `tasktree`
-- containing the tree relative to tid
--
declare xid,xpid INT UNSIGNED;
declare tend BOOLEAN DEFAULT FALSE;
declare tcur CURSOR FOR SELECT id,pid FROM `task`
WHERE ((tid>0 AND pid=tid) OR (tid=0 AND pid IS NULL));
declare CONTINUE HANDLER FOR NOT FOUND SET tend=TRUE;
--
-- external call : flag MUST be FALSE
-- -> creation of the temporary table `tasktree`
--
IF (NOT flag) THEN
DROP TEMPORARY TABLE IF EXISTS `tasktree`;
CREATE TEMPORARY TABLE `tasktree` (
`id` int(10) unsigned NOT NULL,
`pid` int(10) unsigned,
PRIMARY KEY (`id`));
SELECT pid FROM `task` WHERE id=tid INTO xpid;
INSERT `tasktree` SET id=tid,pid=xpid;
END IF;
--
-- recursive (internal) call: flag MUST be TRUE
--
OPEN tcur;
tscan:LOOP
FETCH tcur INTO xid,xpid;
IF tend THEN LEAVE tscan; END IF;
INSERT `tasktree` SET id=xid,pid=xpid;
CALL TASKTREE(xid,TRUE);
END LOOP;
CLOSE tcur;
END

-----------------
Note: Don't omit to set the global variable max_sp_recursion_depth to an adequate positive value (for instance in the file 'my.ini').
und bevor dazu Fragen kommen - das ganze stammt aus dem Handbuch für MySQL 5.6 - ich gehe daher davon aus, dass es selbst bei der neuesten MySQL nicht "so" einfach geht, wie deine Abfrage ... wo hast du dir das überhaupt hergesogen?
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 28.11.2011, 14:12  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von tramp Beitrag anzeigen
Funktioniert die Rekursion überhaupt in diesen Versionen?
MySQL unterstützt keine rekursiven Abfragen.
hts ist offline   Mit Zitat antworten
Alt 28.11.2011, 15:33  
Neuer Benutzer
 
Registriert seit: 27.05.2011
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
tramp befindet sich auf einem aufstrebenden Ast
Standard

ok, schade....dann also doch via php rekursion. danke
tramp ist offline   Mit Zitat antworten
Alt 28.11.2011, 15:36  
Erfahrener Benutzer
 
Registriert seit: 29.10.2009
Beiträge: 113
PHP-Kenntnisse:
Fortgeschritten
mYkon befindet sich auf einem aufstrebenden Ast
Standard

Oder eben Nested Set's!
http://php-resource.de/tutorials/tut...-mit-SQL,3.htm
mYkon ist offline   Mit Zitat antworten
Alt 28.11.2011, 15:37  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nochmal der Hinweis "nested sets" .. dazu gibts auch recht gute fertige Implementationen in PHP
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 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] Join Query mit Hilfe des ZF erstellen dreamcatcher PHP Einsteiger 7 14.08.2011 15:03
Mitarbeiter für Query OS gesucht Kasenoru Sonstige 0 18.06.2011 00:34
impossible where clause / MySQL Integer Query chunky PHP Einsteiger 4 11.04.2011 14:45
' und " in einer Query Ulrikop Datenbanken 7 19.02.2011 17:59
Unabhängige "Auto-Increment Spalte" für ein ON DUPLICATE KEY query? juice122 Datenbanken 4 31.05.2010 20:59
MySQL: INSERT INTO oder UPDATE verknüpft in einem Query juice122 Datenbanken 21 06.05.2010 20:25
[Erledigt] Aufgeteilte Query mit LIMIT & Order bench78 PHP Tipps 2010 4 10.03.2010 02:33
[Erledigt] Regular Expression: Tabellennamen aus query extrahieren Celli PHP Tipps 2009 7 31.05.2009 16:42
Query später weiter einschränken? MatzeMuc86 Datenbanken 9 14.04.2009 14:15
Query funktioniert im SQL Query Browser aber nicht in PHP - DB zu groß ? john_the_bad Datenbanken 10 16.09.2008 18:17
Variablen in Query automatisch escapen Maho88 PHP Tipps 2007 10 31.07.2007 08:42
query r�cksetzen? Promaetheus PHP Tipps 2007 15 01.12.2005 13:53
Query, was aus einer Tabelle mehrere Summen rausholt Datenbanken 3 14.09.2005 16:45
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php recursive select abfrage, mysql recursive query, phpmyadmin query with recursive, phpmyadmin rekursiv tabellen löschen, mysql rekursive abfrage, mysql recursive procedure cursor, mysql recursive queries, recursive queries vs große tabellen, mysql select recursive

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:47 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