php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.06.2005, 22:12  
Gast
 
Beiträge: n/a
Standard Order by ....

Hallo folgende Frage, ich mache eine Abfrage und dann eine Berechnung. Die Berechnung lasse ich mir in der Auswahlliste anzeigen. Wie kann ich es machen, das diese Werte dann geordnet sind ?

Jetzt kommen solche Ergebnisse:

4-5years
0-3months
1-2years
6-9months

soll aber so aussehen:

0-3months
6-9months
1-2years
4-5years

Hier mein Code:

PHP-Code:
<?php

<?PHP

echo"<form action='ind_step4_new.php' 
method='post' name='form' id='form_step3' 
onSubmit='return chkFormular()'>"
;
echo 
"<select size=\"20\" name=\"months\" 
class=\"listen\">"
;

$result mysql_query("SELECT p.*, b.* 
FROM project_spec as p LEFT JOIN 
brand_launch as b ON p.country = b.country 
WHERE p.country='$country' and p.icd_id='$icd_id' 
and p.brand_id=b.brand_id"
);

$num mysql_num_rows($result);
function 
getTimeStampFromDate($date) {
$array explode("/"$date);
return 
mktime(000$array[0], 1$array[1]);
}
$array = array();
if (
$num != 0) {
while (
$row mysql_fetch_array($result)) {
$start getTimeStampFromDate($row['launch_time']);
$end getTimeStampFromDate($row['create_time']);
$d round(($end $start) / 60 60 24 30);
$months "";
      if (
$d <= 3) {
              
$months "0-3 months";
      } else if (
$d >= && $d <= 6) {
              
$months "3-6 months";
      } elseif (
$d >= && $d <= 9) {
              
$months "6-9 months";
      } elseif (
$d >= && $d <= 12) {
              
$months "9-12 months";
      } elseif (
$d >= 12 && $d <= 24) {
              
$months "1-2 years";
      } elseif (
$d >= 24 && $d <= 36) {
              
$months "2-3 years";
      } elseif (
$d >= 36 && $d <= 48) {
              
$months "3-4 years";
      } elseif (
$d >= 48 && $d <= 60) {
              
$months "4-5 years";
      } elseif (
$d >= 60) {
              
$months "more than 5 years";
      }

      
$array[$months]['create_time'][] = $row["create_time"];
      
print_r($array);

}

}
foreach (
$array as $months => $value) {
        echo
"<option value='".implode (","$value['create_time'])."|$months'>$months</option>";
                    }
        echo 
"</select></td>



?>
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.06.2005, 22:52  
Gast
 
Beiträge: n/a
Standard

Guck dir mal die Array Funktionen an, denk da findest du, was du suchst.

mfg boeseRaupe
  Mit Zitat antworten
Alt 30.06.2005, 23:04  
Gast
 
Beiträge: n/a
Standard

Hab geschaut mit sort oder asort, weis bloss nicht an welche Stelle ich das schreiben muss !
  Mit Zitat antworten
Alt 30.06.2005, 23:08  
Gast
 
Beiträge: n/a
Standard

Naja, wenn du den Array mit Daten gefüllt hast und bevor du ihn weiter verarbeitest...

PHP-Code:
<?php
}
// Würds mal da versuchen.
}
foreach (
$array as $months => $value) {
        echo
"<option value='".implode (","$value['create_time'])."|$months'>$months</option>";
                    } 

?>
  Mit Zitat antworten
Alt 30.06.2005, 23:12  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
}
sort($months);
}
foreach (
$array as $months => $value) {
        echo
"<option value='".implode (","$value['create_time'])."|$months'>$months</option>";
                    } 

?>
Funktioniert nix ....
  Mit Zitat antworten
Alt 30.06.2005, 23:15  
Gast
 
Beiträge: n/a
Standard

tja, du machst ja auch nix....
PHP-Code:
<?php
sort
($months); 
?>
Denk mal gernau nach, was das eingentlich bewirkt...
  Mit Zitat antworten
Alt 30.06.2005, 23:17  
Gast
 
Beiträge: n/a
Standard

Was ich will das weis, wenn ich wüßte wie es geht, wäre ich nicht im Forum gelandet !
  Mit Zitat antworten
Alt 30.06.2005, 23:20  
Gast
 
Beiträge: n/a
Standard

Ja schon, aber bisschen selbst nachdenken kannst du ja wohl auch.
Wenn du willst, dass jemand was für dich codet, dann bist du hier im falschen Forum...

Naja egal. Versuchs mal mit
PHP-Code:
<?php
$sort_arry
=sort($array);
?>
mfg boeseRaupe ,)
  Mit Zitat antworten
Alt 01.07.2005, 01:59  
Gast
 
Beiträge: n/a
Standard

Das Problem ist, dass Du keine strukturierten Daten hast sondern mehrere Teilinformationen in einer Zeichenkette. Aber anhand der Teilinformationen willst Du sortieren. Damit tut sich sql sehr schwer.
'2-3 Monate'
'2-3 Jahre'
'Minimum-Maximum Einheit' - eine Zeichenkette
minimum,maximum,einheit - drei einzelne Felder
2,3,'Monate'
2,3,'Jahre'
SELECT ... ORDER BY einheit DESC,minimum,maximum

noch einfach wird es, wenn Du auf das Feld einheit verzichten kannst.
Die kleinste Einheit ist Monate? 2,3,Jahre <=> 24,36,Monate
SELECT ... ORDER BY minimum,maximum
Bei der Darstellung/Ausgabe kann bei Bedarf wieder auf Jahre umgerechnet werden; für die Sortierung ist es jedenfalls erstmal einfacher alles auf eine Einheit zu bringen.
  Mit Zitat antworten
Alt 01.07.2005, 08:23  
Gast
 
Beiträge: n/a
Standard

Also:
Wenn ich das richtig vermute, enthalten die Spalten `launch_time` und `create_time`
ein "Datum" im Format "MM/YYYY".
Das ist zwar ein sehr ungünstiges Format,
aber du kannst dennoch die Differenz in Monaten, die durch die Subtraktion
dieser beiden Spalten enstehen soll, von MYSQL berechnen lassen.
zB so:
---> PERIOD_DIFF(CONCAT(SUBSTRING_INDEX(launch_time, '/', -1),SUBSTRING_INDEX(launch_time, '/', 1)), CONCAT(SUBSTRING_INDEX(create_time, '/', -1),SUBSTRING_INDEX(create_time, '/', 1))) AS differenz

Diese so ermittelte `differnz` kannst du dann als ORDER BY -Kriterium zum Sortieren verwenden.

Deine Funktion ---> function getTimeStampFromDate($date)
und deren Verwendung:
--> $start = getTimeStampFromDate($row['launch_time']);
--> $end = getTimeStampFromDate($row['create_time']);
sowie diese Berechnung:
--> $d = round(($end - $start) / 60 / 60 / 24 / 30);
würden dadurch unnötig.

Teste doch einmal folgende Abfrage:
Code:
$result = mysql_query("
SELECT
   p.*,
   b.*,
   PERIOD_DIFF(CONCAT(SUBSTRING_INDEX(launch_time, '/', -1),SUBSTRING_INDEX(launch_time, '/', 1)), CONCAT(SUBSTRING_INDEX(create_time, '/', -1),SUBSTRING_INDEX(create_time, '/', 1))) AS differenz
FROM
   project_spec as p
LEFT JOIN
   brand_launch as b
   ON p.country = b.country
WHERE
   p.country='$country'
   and
   p.icd_id='$icd_id'
   and
   p.brand_id=b.brand_id
ORDER BY differenz");
Vielleicht kannst du damit dann einfacher weiterarbeiten.

mfG
~dilemma~
  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 mit count, order by, group by...und Probleme BartTheDevil89 Datenbanken 2 15.06.2008 13:34
sql order by Joerg80 PHP Tipps 2008 17 28.03.2008 12:22
ORDER BY im Subquery cycap Datenbanken 12 31.10.2007 20:31
Abfrage = "SELECT * FROM links ORDER BY id" Taktaky PHP Tipps 2008 2 22.08.2007 14:37
Problem mit Ausgabe bzw. Abfrage mit ORDER BY mayer Datenbanken 7 02.07.2006 21:45
order by erweiterung . frage zum verst�ndnis... Promaetheus Datenbanken 5 07.12.2005 14:26
Problem mit ORDER BY Datenbanken 3 13.07.2005 22:07
UPDATE und ORDER BY Datenbanken 1 13.05.2005 01:09
[Erledigt] ORDER BY bei zusammengesetzten Abfragen Datenbanken 5 04.05.2005 09:39
SELECT tbl.col AS a ORDER BY tbl.a versionsabhängig? axo Datenbanken 3 15.04.2005 15:50
Syntaxfehler, wohin kommt ORDER BY PHP Tipps 2005 7 12.02.2005 13:21
ORDER BY nur andersherum PHP Tipps 2004 2 18.10.2004 15:34
ORDER BY, 2 Verschiedene Felder Datenbanken 1 05.10.2004 14:27
DISTINCT oder ORDER BY unknownsoul Datenbanken 5 20.08.2004 12:12
Sortieren mit ORDER BY Datenbanken 4 09.08.2004 09:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
treiber akamai

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