Select wo zahl in id (und id hat meherer zahlen)
Einklappen
X
-
Grundsätzlich gern geschehen. Wenn ich allerdings vorher auf deine Crosspostings gestossen wäre ...
Einen Kommentar schreiben:
-
spitze! vielen herzlichen dank dir!!
werd ich mal so versuchen. stark!
gruss kendor
Einen Kommentar schreiben:
-
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.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());
Einen Kommentar schreiben:
-
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?
Einen Kommentar schreiben:
-
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 | +---------+----------+
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'";
Einen Kommentar schreiben:
-
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 | +--------+----------+---------+---
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}";
Zuletzt geändert von kendor; 07.02.2008, 12:10.
Einen Kommentar schreiben:
-
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";
Einen Kommentar schreiben:
-
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 :SZuletzt geändert von kendor; 07.02.2008, 10:50.
Einen Kommentar schreiben:
-
Ja, normalisieren, d.h. aus id_cat eine eigene Tabelle machen und dann die id_cat-Spalte in die Tonne klopfen.
Einen Kommentar schreiben:
-
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) ...
Code:1 6,7,23,43,53 34 2012-12-12 12:32:09 2123-12-12 21:21:21 ...
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
Code:SELECT ID,id_cat FROM {$CONFIG['tpe']}daten WHERE CONCAT_WS(',',id_cat)={$this->rec}
Code:SELECT ID,id_cat FROM {$CONFIG['tpe']}daten WHERE MATCH(id_cat) AGAINST({$this->rec} IN BOOLEAN MODE)
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)Zuletzt geändert von kendor; 07.02.2008, 01:02.Stichworte: -
Einen Kommentar schreiben: