Antworten auf deine Fragen:
Neues Thema erstellen

Array felder mit selben namen zusammenfassen?

rey

Der Frager ;)

hi,
ist es möglich Array Felder mit selben Inhalt zusammenzufassen?
gegen sei folgende Struktur
array(3) {
[0]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
NULL
[2]=>
array(1) {
[1]=>
string(84) "13__NOW__COMES__THE__TITLE__INHALT TEST ID 13
L__NOW__COMES__THE__TITLE__TEST"
}
}
[1]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
NULL
[2]=>
array(1) {
[0]=>
string(89) "17__NOW__COMES__THE__TITLE__INHALT VON TEST2 ID 17 __NOW__COMES__THE__TITLE__TEST2"
}
}
[2]=>
array(3) {
[0]=>
string(1) "4"
[1]=>
NULL
[2]=>
array(1) {
[2]=>
string(94) "42__NOW__COMES__THE__TITLE__INTEGER ET LIGULA ID 42__NOW__COMES__THE__TITLE__TEST3"
}
}
}
Wie man sieht kommt Zahl 1 an der stelle [0][0] und [1][0] vor Der Inhalt von [1][2][0] ist jedoch ein anderer wie der von [0][2][1]
es ist ein so großes Array weil ich es nicht hin bekommen habe das 2d zu gestalten ;)
der PHP code dazu
PHP:
while($rows = mysql_fetch_array($sql)) 
{
    if(strlen($rows["cate"])!=0){
    
        
        $var[$jk][] = $rows["cate"];
        $var[$jk][][$jk] = $var[$jk][] = $rows["pid"]."__NOW__COMES__THE__TITLE__".$rows["bodytext"]."__NOW__COMES__THE__TITLE__".$rows["title"];

        $werte = array_unique($var[$jk][0]);
        for( $x = 0; $x <= sizeof($werte); $x++ ) {
          if ($werte[$x] != "") { 
            
          }
        }
        sort($var);

    }
        $jk++;

}
wie man sieht habe ich schon versuch mit array_unique das ganze zu lösen.
Jemand eine Idee?
Könnte den ein oder anderen Tipp gebrauchen ;)


Das __NOW__COMES__THE__TITLE__ ist für den späteren explode, da ich es noch nicht herausgefunden habe wie ich die nachkommenden Einträge dem 3d Array als weiteres Element zuweise
 

Duddle

Posting-Frequenz: 14µHz

AW: Array felder mit selben namen zusammenfassen?

Definiere "zusammenfassen". Wie sollen deine Daten danach aussehen?

Edit: probier es einfach mal mit array_merge() bzw. array_merge_recursive(). Wenn das nicht deinem Ziel entspricht, siehe oben.


Duddle
 
Zuletzt bearbeitet:

fakerer

Aktives Mitglied

AW: Array felder mit selben namen zusammenfassen?

ich würde eher veruchen alles mit distinct schon bei der sql abfrage zusammenzufassen allerdings hab ich auch nicht genau verstanden was du zusammenfassen willst und wie es dann aussehen soll.
 

rey

Der Frager ;)

AW: Array felder mit selben namen zusammenfassen?

Mit zusammenfassen meine ich, dass folgende Struktur dann resultiert
array(3) {
[0]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
NULL
[2]=>
array(1) {
[0]=>
string(89) "17__NOW__COMES__THE__TITLE__INHALT VON TEST2 ID 17 __NOW__COMES__THE__TITLE__TEST2"
[1]=>
string(84) "13__NOW__COMES__THE__TITLE__INHALT TEST ID 13
L__NOW__COMES__THE__TITLE__TEST"
}
}
[2]=>
array(3) {
[0]=>
string(1) "4"
[1]=>
NULL
[2]=>
array(1) {
[2]=>
string(94) "42__NOW__COMES__THE__TITLE__INTEGER ET LIGULA ID 42__NOW__COMES__THE__TITLE__TEST3"
}
}
}
 

saila

Moderatorle

AW: Array felder mit selben namen zusammenfassen?

Am besten wäre es, wenn du ein vollständigen Array-Block nimmst und diesen einmal so darstellst, wie du es unter Zusammenfassen als Endergebnis verstehst. Einen großen Unterschied sehe ich noch nicht vom ersten zum letzten Post von dir.

Und wenn du schon dabei bist, zeige einmal den Query-String (dein SELECT-Statement) und probier zuvor noch das von Duddle vorgeschlagene.
 

rey

Der Frager ;)

AW: Array felder mit selben namen zusammenfassen?

Ich habe es hinbekommen dennoch ein kurze frage zu mysql.
Die ist mein SQL COde
PHP:
$sql= mysql_query('SELECT tt_content.pid,pages.title , convert( tt_content.tx_contentcategory_categories USING utf8 ) AS `cate`,tt_content.bodytext FROM `tt_content` LEFT JOIN pages ON tt_content.pid=pages.uid 
 HAVING CHAR_length(`cate`)>0 AND   MATCH(pages.title,tt_content.bodytext) AGAINST("+'.mysql_real_escape_string($q).'*" IN BOOLEAN MODE) AND tt_content.bodytext IS NOT NULL ');
Das Feld tt_content.tx_contentcategory_categories ist ein blob.
Der blob schaut so z.B. aus
5,6,7,10,50
kann man die werte über regex in eine Having bzw. Where klausel noch abfragen?
Nun würde in noch in der der selben SQL ein Where tt_content.uid= 5 etc einbauen
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Array felder mit selben namen zusammenfassen?

Also grundlegend würde ich nicht in der DB über REGEX laufen, weil dies ohnehin die DB-Last um einiges vergrösert. Sinniger wäre hier vor dem insert die Werte aus dem Blob-Feld zu nehmen und per serialize() zu serialisieren. Auslesen kannst du sie mit unserialize().

Das die Abfrage korrekt läuft bezweifel ich, weil zumindest in dem Query-String HAVING vor MATCH/AGAINST steht, anstatt dahinter. Abgesehen fehlt die Bedingung "WHERE" und ich vermute, würdest du einen normalen JOIN setzen (also keine LEFT JOIN, sondern deinen LEFT JOIN Vergleich in die WHERE Bedingung), wäre das ganze noch einmal schneller und somit auch performanter.

Und letztlich würde ich mir aus noch einmal das folgende Kapitel näher durchlesen:
 

rey

Der Frager ;)

AW: Array felder mit selben namen zusammenfassen?

HAVING ist der Ersatz zu where wenn ich mit alias Namen arbeite ? Oder hab ich mir das falsch angelernt

würdest du einen normalen JOIN setzen (also keine LEFT JOIN, sondern deinen LEFT JOIN Vergleich in die WHERE Bedingung), wäre das ganze noch einmal schneller und somit auch performanter.
verstehe ich nicht ganz
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Array felder mit selben namen zusammenfassen?

Zum Thema "HAVING" - das hast du dir nicht korrekt angelernt.

Eine HAVING-Bedingung wird in aller Regel nach einer WHERE-Bedingung gesetzt und findet Anwendung auf der Ergebnis oder Zwischenergebnis einer WHERE-Bedingung. Zumal schon im Manual auch klar gesagt wird, dass eine WHERE vorrang vor einer HAVING hat.
Um es noch genauer zu sagen: HAVING findet den Einsatz nach einer GROUP BY -und vor einer ORDER BY-Klausel. Und wie schon gesagt - die Performance leidet darunter und da wirst du in deinem Einsatz der HAVING auch nicht viel optimieren können.

Was JOIN und LEFT JOIN betrifft, empfehle ich dir das Kapital über JOIN des MySql-Manual einmal genauer nachzulesen. Insbesondere von einem natürlichen JOIN gegenüber einem LEFT JOIN ;)

Und letztlich ist bei deiner Volltextsuche auch zwingend erforderlich, dass du die jeweiligen Felder, auf welche du die (Volltext-) Suche ansetzt, auch den entsprechenden KEY haben. Ansonsten taugt das alles nichts.

Deshalb auch die Frage nach deinem jetzt "laufenden" Query-String, welchen ich sehen möchte.
 

rey

Der Frager ;)

AW: Array felder mit selben namen zusammenfassen?

also zum einen funktiniert die Query ohne probleme zum anderen bewirkt das where bei der sehr kleinen DB schon etwas
Mit Having dauerte die Abfrage
0.0015 sek
Bei ersetzen von Having mit WHERE und herausnehmen des ALIAS Bzw. Einsetzen des echten Tabellen Namens dauerte es
0.0010 sek
So jetzt gehe ich die weisheiten von MYSQL über Joins nochmals durch
 

saila

Moderatorle

AW: Array felder mit selben namen zusammenfassen?

Hi,

das mag zwar alles so sein wie es ist und auch das Ergebnis mag deinen Erwartungen entsprechen. Letztlich ist es ein Zufallsprodukt - das "richtige" Ergebnis.

Fakt ist, das Having nicht in dem Zusammenhang verwendet wird, wie du es vornimmst. Abgesehen davon würde mich deine Erklärung interessieren, was dein Query-String eigentl. überhaupt macht.

Sprich - Durchsuche feld x und mache dies oder das...... wobei - berücksichtige ... usw.. Auf diesem Wege findet man sehr schnell heraus, was da nicht stimmt.

Die Weisheiten von MySql zu HAVING würde ich dir auch sehr dringend empfehlen. Und wenn es nur aus dem Grunde ist, dass du dich in Zukunft nicht wunderst, warum das Ergebnis plötzlich nicht mehr passt oder dem entspricht, was du erwartet hast.

Es sind nur Hinweise auf den korrekten Einsatz von Bedingungen, Klauseln innerhalb eines SELECT's.

Als Beispiel:
Code:
/* Korrekter Einsatz von HAVING mit einem Zeitaufwand 0:00:0.0392 */
SELECT f1, f2 FROM tbl t GROUP BY f2 HAVING f2 REGEXP 'B';

/* Anstelle HAVING im üblichen "normalen" Query-Aufbau Zeitaufwand 0:00:0.0292 */
SELECT f1, f2 FROM tbl t WHERE f2 REGEXP 'B' GROUP BY f2;

Zum einen sprechen wir hier über den Query-Browser-Result von minimalen Zeitunterschieden. Fraglich ist jedoch nicht das Ergebnis eines Query-Browser (Maschinensprache) sondern vielmehr, wie ist das ganze im Zeitaufwand unter Serverbedingung und zudem - wenn du eine MySql-Datenbank mit weiteren Usern des Provider nutzt. Dann sieht das ganze bzgl. Performance exorbitant anderst aus!

Das Beispiel bezieht sich auf eine kleine Tabelle mit gerade mal 15 Einträgen. Die Frage ist nun, was in dem jeweiligen Query passiert und worin der Unterschied liegt. Und - was passiert, wenn z.B. x User darauf zugreifen? Quasi - Stresstest.

Also - bevor etwas korrekt läuft, sollte immer geprüft werden, ob letztlich auch die eingesetzten Methoden korrekt angewand wurden ;) Ist rein gut gemeint!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben