CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
11.08.2004, 09:51:52
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: szb
Beiträge: 95
|
|
felder zu einen zusammenfassen
hallo ihr Denkarbyter
wollt mal fragen ob es möglich ist mehrere Felder zu einen für weitere MySQL-Abfragen zusammenzufassen und wie ich da rangehen müsste.
Ich habe für meinen Eventkalender www.ska-times.de/ eine MySQL-Tabelle in der sich mehrere Felder (a01, a02, a03)für Artisten befinden. diese müsste ich erst mit DISTINCT abfragen zu einen Feld/oder Array zusammenfassen und nochmal mit DISTINCT filtern.
Das Problem ist bei der jetzigen Abfrage nach Bands sortieren, dass nur die Artisten berücksichtigt werden die im ersten Feld "a01" stehen
Ergebnis soll ein/e Variable/Array sein in dem sich dann alphabetisch sortiert die Bands befinden
so sieht´s im Mo0ment aus:
PHP-Code:
$sql = "SELECT DISTINCT a01
FROM tour
WHERE dates>='$today'
ORDER BY a01 ";
$result7 = mysql_query($sql, $db);
while($row7 = mysql_fetch_array($result7)){// while die1.
$datrow=$row7['a01'];
echo "<tr><td bgcolor="#003300"><font color="#FF9900"> <b>".$datrow."</b></font></td></tr>n<tr><td>";
$sql = "SELECT *
FROM tour
WHERE a01='$datrow' AND dates>='$today'
ORDER BY dates";
$result8 = mysql_query($sql, $db);
while($row8 = mysql_fetch_array($result8)){// while die2.
echo $row8['dates']." *".$row8['a01'];
if ($row8['a02'] !='') {echo ", <b>".$row8['a02'];}
if ($row8['a03'] !='') {echo ", ".$row8['a03'];}
echo "</b> in ". $row8['country']." ".$row8['place'];
if ($row8['venue'] != '') { echo " / ".$row8['venue'];}
if ($row8['name'] != '') { echo " / ".$row8['name'];}
echo "<br>n";
}//2.while_end
echo "</td></tr>n";
}//1.while_end
echo "</table>";
error_reporting(E_ALL);
mysql_close();
Geändert von schlodd (11.12.2005 um 23:05:05 Uhr)
Grund: Link geändert
|
11.08.2004, 09:59:49
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
Gib mal die Struktur der Tabellen dazu. Lässt sich leichter denken, so.
|
11.08.2004, 10:17:00
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
> wollt mal fragen ob es möglich ist mehrere Felder zu einen für weitere MySQL-Abfragen zusammenzufassen und wie ich da rangehen müsste.
ja, mit concat unter der verwendung von aliasen.
SELECT CONCAT( `feldeins` , `feldzwei` , `felddrei` ) AS `zusammengefasst` [...] ORDER BY `zusammengefasst`
|
11.08.2004, 13:13:31
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: szb
Beiträge: 95
|
|
Danke für die superschnelle Antwort ihr beiden
@ C4
die gekürzte Struktur:
tournum int(8) auto_increment
dates varchar(35)
kind varchar(35)
name varchar(40)
a01 varchar(35
a02 varchar(35)
a03 varchar(35
--------------------
place varchar(35)
venue varchar(54
country varchar(5)
@ feuervogel
glaub, ich hab mich falsch ausgedrückt. Dein Vorschlag ergibt pro Datensatz eine Zeichenkette, die ich so nich gebrauchen kann. Brauchen tu ich dagegen ein ARRAY was die 3 Zeichenketten á Datensatz speichert.
Ich glaub allein mit MySQL geht´s wohl nicht. Hab´schon herumprobiert aber ohne Erfolg :(
Mein nächster Gedanke ist, die Felder mit DISTINCT abzufragen und in ein ARRAY zu lesen
$sql = "SELECT DISTINCT a01,
DISTINCT a02
DISTINCT a03 ...weiß nicht ob das so richtig ist
dann ARRAY über einer W-Schleife füllen:
z.B.
$bands[]= "row['a01']";
$bands[]= "row['a02']";
$bands[]= "row['a03']";
usw. irgendwas ist aber glaub hieran falsch gewesen
wie schmeiß ich dann mehrfach vorkommende Einträge aus dem ARRAY?
kompliziert, aber ich weiß keinen einfachen Weg :(
|
11.08.2004, 13:23:35
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
Ich steige noch nicht so ganz hinter Dein Problem. Versuch's mal mit Beispieldatensätzen zu erklären. Hilft meistens. :)
Du scheinst mysql_fetch_array() nicht zu kennen, richtig?
--> http://php.net/mysql_fetch_array
Zitat:
wie schmeiß ich dann mehrfach vorkommende Einträge aus dem ARRAY?
|
--> http://php.net/array_unique
|
11.08.2004, 19:58:18
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: szb
Beiträge: 95
|
|
hm, dachte mir schon das da keiner durchblickt.
gut ich versuche es mit weiteren Worten
Jeder Datensatz enthält das Datum | a01, a02, a03 für Bandnamen | place | venue | und weitere Angaben, die jetzt keine Rolle spielen
nehmen wir 3 Datensätze und 2 Felder a01, a02
a01| band1, band2, band41
a02| band24, band1, band1
Eine Abfrage mit DISTINCT nütz mir in dem Fall jeweils nur für
ein Feld aber nicht zwischen den Feldern
Also müssen nochmal die restlichen mehrfach vorkommenden
Bands rausgeschmissen werden. Um dies zu realiesieren
muss ich die Felder a01, a02 und a03 nach der ersten Abfrage
mit DISTINCT in ein ind. Array bringen um sie zu filtern.
ich möchte jetzt eine Ausgabe aller Termine ab dem heutigen
Tag für jede Band.
ich hoffe das mich jetzt jemand versteht *aufdenFingernagelkauend*
Vielleicht gibt es eine ganz einfache Lösung mit MySQL, aber ich weiß nicht wie :(
ok C4, ich experimentier mal mit array_unique herum, danke für den Tip. Vielleicht hilft mir das weiter
|
12.08.2004, 09:08:58
|
SELFPHP Guru
|
|
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
|
|
100%ig bin ich noch nicht hinter Dein Problem gestiegen, aber einen Tipp habe ich.
Ist eine unsaubere Methode, aber sie funktioniert 1a. Bei der Ausgabe filterst Du praktisch alle doppelten Datensätze heraus. Ein Beispiel:
PHP-Code:
<pre><?php
// Array mit sinnlosen Zahlen von 1 bis 5 erstellen
for ($i=0; $i<15; $i++) {
$arr[]=rand(1, 5);
}
// Alle Zahlen ausgeben
for ($i=0; $i<count($arr); $i++) {
echo ($i+1).": {$arr[$i]}n";
}
echo "n";
// Jede Zahl einmalig ausgeben
$found='';
for ($i=0; $i<count($arr); $i++) {
if (!strstr($found, $arr[$i].'#')) {
$found.=$arr[$i].'#';
echo ($i+1).": {$arr[$i]}n";
}
}
?></pre>
Das einfach auf Deine Bands oder Daten oder Hausnummern oder was auch immer anwenden und Du hast eine gefilterte Ausgabe.
Vielleicht hilft's Dir ja weiter.
|
13.08.2004, 08:25:12
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: szb
Beiträge: 95
|
|
@ C4, Danke für Deine Mühe. Ich denke dass ich ´ne Lösung mit ARRAY_UNIQUE finde. Habe eben nur keine Zeit zum Probieren, da ich beruflich voll eingespannt bin...
|
19.08.2004, 19:34:58
|
Anfänger
|
|
Registriert seit: Oct 2003
Ort: szb
Beiträge: 95
|
|
hallo alle miteinander, habe mal wieder etwas Zeit und ich hoffe ihr auch für mich.
nach eimnigen Probieren und Forschen bin ich nun auf CONCAT_WS gestoßen,
Dank feuervogel´s Tip. Dabei hab ich mir überlegt die Felder mit Trennzeichen als
String in eine Variable zu holen. Klappt alles wunderbar und selbst die leeren Felder
werden einfach übersprungen und somit schon raus.
Jetzt habe ich das Problem
die mehrfach vorkommenden Feldinhalte die jetzt in der Variablen stehen auszufiltern
und in einem einfachen indizierten Array zu speichern. Irgendwie hab´ ich das mit den
Arrays noch nicht geschnallt, vielleicht kann nochmal jemand helfen, bzw. darauf
zeigen was ich falsch mache.
der letzte Stand des Scripts:
PHP-Code:
$sql = "SELECT CONCAT_WS(', ', a01, a02, a03, a04)
AS artists
FROM tour
WHERE dates>='$today'
AND (kind='concert'
OR kind='festival'
OR kind='scooter-run')";
$result7 = mysql_query($sql, $db);
while($row7 = mysql_fetch_array($result7)) {// while die0.
//echo $row7[artists]."<br>";
$artistlist = array($row7['artists']);
$artlistarr = array_unique($artistlist);
echo $artlistarr[0]."<br>";
//echo $artistlist[0]."<br>";
//echo $artlistarr[0]."<br>";
}// while die 0.
//$artlistarr[0] alphab. sortieren lassen
//while-schleife von 0-Ende auslesen
//echo $artlistarr[0]."<br>";
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:05:29 Uhr.
|