php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.08.2005, 15:07  
Gast
 
Beiträge: n/a
Standard [Erledigt] [fast gelöst] Tricky: Abfrage auf Freigabe mit Zahlen

Folgendes:
In meinem CMS (Typo3) wird jede Gruppe einer ID Nummer zugeornet.
Wenn ich nun ein Dokument in der DB anlege, speichere ich die ID Nummern kommasepariert.
Also z.B.:
... ... Gruppenfreigabe ... ...
Dok1 ... 5,44,356,355 ... ...

Wenn ich die per SQL Abfrage
Code:
WHERE Gruppenfreigabe LIKE [$guppenfr[0]]
kann es natürlich passieren, daß eine einstellige ID in z.B. einer
zweistelligen gefunden wird.
Zur Verdeutlichung:
1. währen alle ID's dreistellig würde es gehen.
2. Würde ich die echten Gruppennamen statt der ID's nehmen ginge es auch.

Aber 1. kann ich nicht sicherstellen. (Will ich auch gar nicht)
und 2. würde doch viel mehr Speicher in der DB verbrauchen.

Wie würdet ihr vorgehen. habe ich ne einfache Lösung übersehen.

PS: Ich will nicht erst jeden Datensatz auslesen, Kommas entfernen,
in Array schreiben und dann vergleichen. Dauert zu Lange.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 31.08.2005, 15:22  
Gast
 
Beiträge: n/a
Standard

versuchs mal so:
Code:
... WHERE $guppenfr[0] IN(gruppenfreigabe)
~dilemma~
  Mit Zitat antworten
Alt 31.08.2005, 15:23  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

$sql = ("SELECT * from wo WHERE Gruppenfreigabe LIKE ',".$gruppenfr.",'");

sofern am anfang und auch am ende des strings kommas sind.
__________________
keine
cytrobic ist offline   Mit Zitat antworten
Alt 31.08.2005, 15:37  
Gast
 
Beiträge: n/a
Standard

@cytrobic:
Leider ist das linke Komma nicht beim ersten Eintrag vorhanden.
Würde also den ersten Eintrag nicht finden.

@dilemma:
Sieht auch nicht richtig aus.
z.B.: würde er $gruppenfr[0]=8
auch in diesem String finden 2,44,888,43
oder täusche ich mich ? habs jetzt nicht gecodet

@all: Muss wohl mein DB Design anpassen. Argggg. Mit nem Komma vorne sollte es gehen. Besten Dank und schönen Feieraben :wink:
  Mit Zitat antworten
Alt 31.08.2005, 15:42  
Gast
 
Beiträge: n/a
Standard

Zitat:
@dilemma:
Sieht auch nicht richtig aus.
z.B.: würde er $gruppenfr[0]=8
auch in diesem String finden 2,44,888,43
oder täusche ich mich ? habs jetzt nicht gecodet
NEIN!!!
'Er' würde $gruppenfr[0]=8 NICHT im IN(2,44,888,43) finden!

~dilemma~
  Mit Zitat antworten
Alt 31.08.2005, 15:47  
Gast
 
Beiträge: n/a
Standard

Uuups, dann hab ich irgendwie ein krassen Denkfehler.
Sorry, aber kurz vor Feierabend. Da wird man faul.
Mache ich mich gleich Morgen mal dran.
Danke Dilemma.

Ist es eigentlich seltsam das ich über meinen SQL-Server in der dritten Person spreche ??
Werde mir bei gelegenheit mal einen Namen für "Ihn" ausdenken.
Evtl. Vorschläge bis Morgen !!!
So jetzt aber raus hier
  Mit Zitat antworten
Alt 31.08.2005, 15:54  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

Name = eSQuiLi

ps: dilemmas lösung ist besser
ps2: aber meine funtzt auch
__________________
keine
cytrobic ist offline   Mit Zitat antworten
Alt 01.09.2005, 09:27  
Gast
 
Beiträge: n/a
Standard

Endlich klappts. Wollte schon wieder posten. Hatte die Klammern vergessen. *g*
Muss einfach genauer arbeiten.

Ich denke ich werde "Ihn" Ewigkeitsbunker nennen.
Inspiriert von einem Buch welches ich.... usw.

Hier noch mal der Code falls ihn jemand braucht:

PHP-Code:
<?php
function userGruppenToString($dasArray)
{
    foreach(
$dasArray as $gruppe)
    {
        
$neuString.=$gruppe ' IN (freigabe_gruppen) OR '
    }
    
$neuString=substr($neuString,0,strlen($neuString)-4);
    echo 
"$neuString
"
;
    return 
$neuString;
}

// Das return wird hier als $gruppenString übergeben

function anzeigen($reihenfolge$search,$orderby$offset$laenge$username$gruppenString$fkategorie)
{

    
$eins"SELECT id,name,besitzer,datum,version,ebene,ort FROM dokumente where";
    
$zwei" ((id like '%$search%' OR name like '%$search%' OR version like '%$search%')";
    
$drei" AND (kategorie = '$fkategorie')";
    
$vier" AND (($gruppenString) OR besitzer = '$username'))";
    
$funf" ORDER BY $orderby $reihenfolge LIMIT $offset, $laenge";
    
$query "$eins $zwei $drei $vier $funf";
    echo 
"$query
"
;
?>
Ausgabe:

Zitat:
SELECT id,name,besitzer,datum,version,ebene,ort FROM dokumente where ((id like '%templ%' OR name like '%templ%' OR version like '%templ%') AND (kategorie = 'Bedienungsanleitung') AND ((468 IN (freigabe_gruppen) OR 469 IN (freigabe_gruppen)) OR besitzer = 'muthoff')) ORDER BY id DESC LIMIT 0, 5
  Mit Zitat antworten
Alt 01.09.2005, 11:04  
Gast
 
Beiträge: n/a
Standard

So langsam rollen sich die Fußnägel auf.

also wenn im Feld
PHP-Code:
<?php
freigabe_gruppen
468,
?>
steht dann findet die Abfrage es.
wenn dagegen:
PHP-Code:
<?php
523
,234,468,333,
?>
steht findet er es nicht.

hab ich noch irgendwas übersehen.

Bin jetzt ziemlich ratlos
  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
Abfrage nur bei Zahlen? BartTheDevil89 Datenbanken 3 27.11.2005 13:21

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
@dilemma sql

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