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
  #1 (permalink)  
Alt 07-02-2008, 01:38
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Standard Select wo zahl in id (und id hat meherer zahlen)

hallo leute
ich versuche nun schon seit ner kleinen ewigkeit folgendes:
also ich habe eine tabelle
Code:
tabelle_daten:
ID (int)
id_cat (varchar)
id_event (int)
start (datetime)
stop (datetime)
...
ein beispiel eines solchen datensatzes könnte sein:
Code:
1
6,7,23,43,53
34
2012-12-12 12:32:09
2123-12-12 21:21:21
...
ihr seht, im feld "id_cat" stehen meherer zahlen (die ich per implode da reingespeichert habe).

MEINE FRAGE nun:
ich versuche die id aller einträge zu finden, die eine gewisse zahl in dieser zelle "id_cat" haben zu finden.

ich habe folgende varianten versucht und es funktioniert einfach nicht:
Code:
SELECT ID,id_cat FROM {$CONFIG['tpe']}daten HAVING INSTR(id_cat,'{$this->rec}')
Code:
SELECT ID,id_cat FROM {$CONFIG['tpe']}daten WHERE id_cat LIKE '%{$this->rec}%'
Code:
SELECT ID,id_cat FROM {$CONFIG['tpe']}daten HAVING INSTR(id_cat,'{$this->rec}',1)>0
und sogar
Code:
SELECT ID,id_cat FROM {$CONFIG['tpe']}daten WHERE CONCAT_WS(',',id_cat)={$this->rec}
und
Code:
SELECT ID,id_cat FROM {$CONFIG['tpe']}daten WHERE MATCH(id_cat) AGAINST({$this->rec} IN BOOLEAN MODE)
das muss doch irgendwie gehen?
ich bin euch super dankbar für hilfe!
(ps. {$CONFIG['tpe']} ist für globale einstellungen - wird in diesem fall mit "tabelle_" überschrieben und in {$this->rec} steht die zu findende zahl also 2 oder 4 oder 200 oder 132)

Geändert von kendor (07-02-2008 um 02:02 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 07-02-2008, 07:56
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, normalisieren, d.h. aus id_cat eine eigene Tabelle machen und dann die id_cat-Spalte in die Tonne klopfen.
Mit Zitat antworten
  #3 (permalink)  
Alt 07-02-2008, 11:40
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hey ghostgambler

das klingt ja ganz verlockend einfach. nur habe ich keinen plan was du meinst was ich jetzt machen soll... gibt es denn mysql anweisungen die das direkt machen können?

ich wäre sehr froh für ein kleines code snippet oder so denn wenn ich nach datenbanknormalisierung suche komme ich zu "JOINS&Co" und alles andere als zur suche und vorallem SELECTion in serialisierten daten. danke

vorallem gehts mir ja darum die ID's herauszufinden, in denen in der zeile id_cat bestimmte werte vorkommen. wenn ich im netz suche, erhalte ich immer dasselbe resultat: SELECT * FROM ... WHERE ... LIKE ... aber genau das funktioniert ja bei mir nicht.
muss ich die werte in id_cat irgendwie noch wandeln? mmh :S

Geändert von kendor (07-02-2008 um 11:50 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 07-02-2008, 11:55
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das wäre dann die Abfrage:
PHP-Code:
$sql "SELECT
        id
    FROM "
        
$CONFIG['tpe'] . "daten AS d
    INNER JOIN
        cat AS c ON d.id = c.datenId
    WHERE
        c.catId = $this->rec"

__________________
Gruss
H2O
Mit Zitat antworten
  #5 (permalink)  
Alt 07-02-2008, 13:07
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sdanke - aber leider funktioniert auch das nicht... :S
also vielleicht hab ich dein query falsch interpretiert (oder du meine tabelle).
bin etwas begriffsstutzig im moment wohl...

also nochmal zum problem:

ich habe folgende tabellen:
Code:
daten:
+-----------------+----------------------+------+-----+
| ID	| id_cat  | start 		 | stop | ... |
+-----------------+----------------------+------+-----+
| 1	| 2,3,1	  | 2000-12-12 12:32:09  | ...  |     |
| 2	| 5,3	  | 2123-12-12 12:34:09  | ...  |     |
| 3	| 1 	  | 2234-12-12 12:35:09  | .	|
| 4	| 1,3,5,6 | 2345-12-12 12:36:09  | .  	|  
| 5	| 2,4	  | 2456-12-12 12:37:09  | .  	|  
| 6	| 6	  | 2567-12-12 12:38:09  |  	|
+-------+---------+----------------------+------+---

cat:
+--------+----------+---------+-----+
| id_cat | subofcat | Name    | ... |
+--------+----------+---------+-----+
| 1 	 | 0	    | kateg1  | ...
| 2      | 1 	    | kateg12 | ..
| 3 	 | 1	    | kateg13 | .
| 4      | 5 	    | kateg51 | .
| 5 	 | 0	    | kateg5  | 
| 6      | 5 	    | kateg52 | 
+--------+----------+---------+---
und ich will jetzt alle einträge aus der tabelle "daten" in denen bei id_cat ein bestimmter wert vorkommt.

beispiel:
ich will alle einträge (daten.ID) die zur kategorie "kateg1" gehören (id_cat=1)
das würde mir als resultat für ID folgende werte geben: 1,3,4

versucht habe ich das mit all den obigen queries und dem hier:
könnt ihr mir helfen? vielen dank!
PHP-Code:
$trigger_query="SELECT ID FROM "$CONFIG['tpe'] . "daten AS d 
                    INNER JOIN "
$CONFIG['tpe'] . "cat AS c ON d.id_cat = c.id_cat 
                    WHERE c.id_cat = {$this->rec}"


Geändert von kendor (07-02-2008 um 13:10 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 07-02-2008, 13:38
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da brauchst du eine neue Beziehungstabelle:
Code:
daten_cat
+---------+----------+
| id_daten | id_cat   |
+---------+----------+
| 1        | 1        |
| 1        | 2        |
| 1        | 3        |
| 2        | 3        |
| 2        | 5        |
| 3        | 1        |
| 4        | 1        |
| 4        | 3        |
| 4        | 5        |
| 4        | 6        |
| 5        | 2        |
| 5        | 4        |
| 6        | 6        |
+---------+----------+
Für jede mögliche Daten-Cat-Beziehung gibt es darin einen Eintrag. Dafür kannst du dann das Attribut id_cat aus der Daten-Tabelle löschen. Und wenn du die Cat-Bezeichnung als Paramter hast, geht es natürlich statt dessen über alle drei Tabellen, z.B.:
PHP-Code:
$trigger_query "SELECT 
                    ID 
                FROM 
                    " 
$CONFIG['tpe'] . "daten AS d 
                INNER JOIN 
                    " 
$CONFIG['tpe'] . "daten_cat dc AS c ON d.id = dc.id_daten
                INNER JOIN 
                    " 
$CONFIG['tpe'] . "cat AS c USING(id_cat)
                WHERE 
                    c.name = '$this->rec'"

__________________
Gruss
H2O
Mit Zitat antworten
  #7 (permalink)  
Alt 07-02-2008, 13:51
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sehr gut danke... super board!

nun, wie kann ich denn aus der bestehenden tabelle eine solche neue beziehungstabelle generieren? resp. das problem ist, dass ich auf die daten tabelle keinen einfluss habe, denn die wird von einem externen script so gefüllt :S

ich müsste also irgendwie jedes mal, wenn die datentabelle geändert wird (neuer eintrag oder update) die beziehungstabelle daten_cat auch auktualisieren können. gibts ideen dazu?
Mit Zitat antworten
  #8 (permalink)  
Alt 07-02-2008, 14:22
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von kendor
... denn die wird von einem externen script so gefüllt :S

ich müsste also irgendwie jedes mal, wenn die datentabelle geändert wird (neuer eintrag oder update) die beziehungstabelle daten_cat auch auktualisieren können.
Wer kommt denn auf so hirnverbrannte Ideen. Da bleibt dir wohl nicht viel anderes übrig. Hier mal eine Skizze, wie su eine Aktualisierung stattfinden könnte:
PHP-Code:
$sql "TRUNCATE TABLE daten_cat";   // Tabelle leeren
mysql_query($sql) || die(mysql_error());
$sql "SELECT
            id, id_cat
        FROM
            daten"
;
$inserts = array();
mysql_query($sql) || die(mysql_error());
while(
$obj mysql_fetch_object){
    
$dId $obj->id;
    
$cIds explode(','$obj->id_cat);
    foreach(
$cIds as $cId){
        
$inserts[] = "($dId, $cId)";
    }
}
$sql "INSERT INTO daten_cat(id_daten, id_cat)
        VALUES " 
implode(', '$inserts);    // Daten neu einfügen
// echo "$sql<br />";
mysql_query($sql) || die(mysql_error()); 
Falls deine Tabellen vom Typ InnoDB sind, würde ich das Ganze noch in eine Transaktion setzen.
__________________
Gruss
H2O
Mit Zitat antworten
  #9 (permalink)  
Alt 07-02-2008, 14:40
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Standard

spitze! vielen herzlichen dank dir!!
werd ich mal so versuchen. stark!
gruss kendor
Mit Zitat antworten
  #10 (permalink)  
Alt 07-02-2008, 14:44
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Grundsätzlich gern geschehen. Wenn ich allerdings vorher auf deine Crosspostings gestossen wäre ...
__________________
Gruss
H2O
Mit Zitat antworten
  #11 (permalink)  
Alt 07-02-2008, 15:01
kendor
 Newbie
Links : Onlinestatus : kendor ist offline
Registriert seit: Sep 2007
Beiträge: 11
kendor ist zur Zeit noch ein unbeschriebenes Blatt
Unhappy

tut mir echt leid, das war dumm von mir.
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 00:23 Uhr.