ugrás a tartalomhoz

MySQL, PHP kezdok kerdese

eaposztrof · 2007. Jún. 12. (K), 18.59
hogyan tudok egy array-be ujabb tartalmat dobni?
en igy probaltam, de nem megy. mindig csak egy tartalma van

$date=array();
while ($row = mysql_fetch_assoc($result)) {
 $dates=$row['submitted']; //kiolvasom a 'submitted' sort, stringkent
 $date=&$dates; //hozzaadom a stringet a meglevo arrayhez
}
es a $date csak egy 'submitted'-et tartalmaz
 
1

operator[]

Csiszár Attila · 2007. Jún. 12. (K), 19.25
$date[]=$row["submitted"];
Egyébként meg: érdemes tanulmányozni a php manual-t.
Üdv. ati
2

egyformak kiszurse

eaposztrof · 2007. Jún. 12. (K), 19.39
koszi, megtalaltam en is a manualban de amit nem talalok az az, h ha egy tombben ketszer szerepel ugyanaz, akkor is csak egyiket irja ki. koszi a turelmet
3

unique

eaposztrof · 2007. Jún. 12. (K), 19.51
bocsi, megint tul hamar kerdeztem, de alig talalom meg a kulcsszavakat ami szerint rakereshetnek.

array_unique();
4

array_push

Csorba Norbert · 2007. Jún. 13. (Sze), 10.12
$date = array();
array_push($date, $uj_tartalom);
5

mi?

Fraki · 2007. Jún. 13. (Sze), 10.20
Ez a parancs:

$date=&$dates;

egy sima referencia szerinti értékadás, semmit nem ad hozzá semmihez.
Ha meg a tömbökkel kell ismerkedni, akkor a kulcsszó nyilván az array (nem értem, hogy jön ide az array_unique(), ami, mint a neve is mutatja, a duplikátumokat tüntetni el egy tömbből...)
6

unique

eaposztrof · 2007. Jún. 13. (Sze), 18.00
array([0] => 2007-05-05 [1] => 2007-05-04 [2] => 2007-05-04 [3] => 2007-04-24);
ebbol kellene csinalni:
array([0] => 2007-05 [1] => 2007-05 [2] => 2007-05 [3] => 2007-04);
majd unique-vel ezt:
array([0] => 2007-05 [2] => 2007-04);
7

kód

tlof · 2007. Jún. 13. (Sze), 22.21
Egy megoldás a problémára.
A foreach-el végig mész a tömbön, levagdalod a fölösleges elemeket a stringről, majd megnézed, hogy benne vannak-e a többme és ha nem akkor bedobod az elemet a tömbbe.

Hátránya, hogy nagyon nagy elemszámú tömbnél az in_array lassú.

$tomb = array(0 => '2007-05-05',  1 => '2007-05-04', 2 => '2007-05-04',  3 => '2007-04-24');
$ujtomb = array();

foreach ($tomb as $item)
{
	$hossz = (strlen($item) - 3);
	$temp = substr($item, 0, $hossz);
	if (!in_array($temp, $ujtomb))
	{
		$ujtomb[] = $temp;
	}
	unset ($temp);
}
B, megoldás:

$tomb = array(0 => '2007-05-05',  1 => '2007-05-04', 2 => '2007-05-04',  3 => '2007-04-24');
$ujtomb = array();

foreach ($tomb as $item)
{
	$hossz = (strlen($item) - 3);
	$temp = substr($item, 0, $hossz);
	$ujtomb[$temp] = $temp;
	unset ($temp);
}

Annyi változott, hogy az asszociativ tömbök azon tulajdonságát használtad ki, hogy egy névnél csak egy érték lehet, igy a végén garantáltan minden elem csak egyszer szerepel a tömbben. Sokkal gyorsabb megoldás, hátránya, hogy nem 100%-ik azt kapod amit szerettél volna, de egy utólagos foreach még mindig gyorsabb nagy elemszámnál mint a folytonos in_array
8

mysql_results, searc, array

eaposztrof · 2007. Jún. 15. (P), 17.11
no.. ettol mar a szomszedgyerek is osszerezzent, en meg mar izzasig kinoztam a php.net-et meg google-t.. bizom benne h nektek kisujjbol megy.
$mysql_results = mysql_query ("select * from $table where $row_id like '$search_string'");
 
//pelda:
// $row_id tartalmai 2007-05-01,2007-05-01,2007-05-02,2007-05-03,2007-06-20
// $search_string-nak kell mukodjon ebben a formaban is: "2007-05" es ebben is: "2007-05-01"
// ha "2007-05", egy ilyen tombot kellene kapjak: array("2007-05-01","2007-05-01","2007-05-02","2007-05-03");
// ha "2007-05-01" akkor meg ilyent: array("2007-05-01","2007-05-01");
9

mi a kérdésed?

gex · 2007. Jún. 15. (P), 17.20
nem értem, hogy mit szeretnél kérdezni. a felvetett témádra már elégséges választ kaptál, mi kéne még, hogy kisujjból menjen?
10

ujtema

eaposztrof · 2007. Jún. 15. (P), 17.32
ez egy ujabb kerdes lenne.. megprobalom erthetobben..

$mysql_results = mysql_query ("select * from $table where $row_id like '$search_string'");

mysql, $row_id (tartalmait lasd alabb) sorabol kell kilistazzam azokat a sorokat, amelyek tartalmazzak a kovetkezo stringet: "2007-05-01" (pelda szerint ebbol 2 van). ez megoldhato az alabbival:
mysql_query ("select * from $table where $row_id like '2007-05-01'");
de nekem akkor is listaznia kell, ha a '2007-05-01' helyett csak anyit irok: '2007-05', de ekkor mar a pelda szerint 4 talalatot kell visszaadjon.

$row_id tartalmai: 2007-05-01,2007-05-01,2007-05-02,2007-05-03,2007-06-20
11

nincs kérdés...

gex · 2007. Jún. 15. (P), 17.43
még mindig nem tettél fel kérdést, ajánlom figyelmedbe ezt a szálat.
azért megpróbálom. az a baj, hogy nincs eredmény? talán kéne egy % jel a like utáni részbe. a dátumok kezelésére pedig vannak külön függvények. teszteld le hogyan gyorsabb.
12

Új kérdés = új téma

Marcell · 2007. Jún. 15. (P), 17.46
Tedd fel új témába az új kérdést, és akkor később könnyebb lesz visszakeresni, ha valaki ugyanebbe futna bele.

Amúgy a kereséshez a % metakarakter és a REGEXP parancs használatos a MySQL-ben. Bővebben: http://dev.mysql.com/doc/refman/4.1/en/pattern-matching.html
13

kesztermek hirek mysqlbol stringgel vezerelve, archivval

eaposztrof · 2007. Jún. 15. (P), 19.44
ime amit alkottam, ezen kerdesek segitsegevel.. mondjuk h 3ev utani visszateressel.. amint kerdeseimbol is kitunt, sokminden kimaradt ezido alatt.. biztos vagyok benne h sok korrigalni valo van meg benne.. szivesen varom a tippeket es tanacsokat.. h kovetkezo jobban sikeruljon.. nemcsak nekem hanem bajtarsaknak szinten.
<?php
include("config.php");
@mysql_connect($dbhost,$dbuser,$dbpass);
@mysql_select_db($dbname);

 if ( isset($_REQUEST['news']) ) {
    $news=$_REQUEST['news'];
 }

$result = mysql_query("SELECT * FROM ".$table." order by submitted desc");
$num_rows = mysql_num_rows($result);
$date = array();
$i = 1;
$monthn = array("01"=>"January", "02"=>"February", "03"=>"March", "04"=>"April", "05"=>"May", "06"=>"June", "07"=>"July", "08"=>"August", "09"=>"September", "10"=>"October", "11"=>"November", "12"=>"December");

//only the selected days
	if ($news) {

$results = mysql_query ("select * from $table where submitted like '$news%'");

		if ($news=="archive") { echo "<div class=newstext>Please select the Month</div><br>"; };
		while ($row = mysql_fetch_assoc($results))	{
					if ($i<$onpage*3) {
//						echo "1<br>";
						$mf=explode("-",$row['submitted']);
						$monthformat=$mf[1]."-".$mf[2]."-".$mf[0];
						$content_href=$row['titlelink']." target=_new";
						echo "<a name=news".$row['id']."><br><div class=newsdate>".$row['submitted']." </div><a class=newstitle href=".$content_href.">".$row['title']."</a><br>";
//						echo "2<br>";
						echo "<div class=newstext>".nl2br($row['content'])."</div><br><hr>";
					}
					$i++;
		};
		//footer daylinks
		while ($row = mysql_fetch_assoc($result))	{
			$dates2=$row['submitted'];
			$date2[]=$dates2;
		}

//		if ($news!="archive") {echo "Days | ";};

/*		$i=0;
		$dateu2=array_unique($date2);
		foreach($dateu2 as $elem) {
		    $explode = explode('-',$elem);
		    if($explode[1] == substr($news, 5, 2)) {
		        $dateu2n[] = $elem;
		    }
		}

		foreach ($dateu2n as $asd2)	{
			if ($asd2!= "") {
				if ($news == $asd2) {
					echo "<a>";
					echo substr($asd2, 8, 2).". ";
					echo "</a> | ";
				} else {
					echo "<a href=?news=".$asd2.">";
					echo substr($asd2, 8, 2).". ";
					echo "</a> | ";
				}
			}
			$i++;
		};
*/ // thats no more important but i leave in, working
		$i=0;
    		$dateu = array_values(array_unique($date2));
		$dateno=array_count_values($dateu);
		$date_array=array();
		foreach ($dateno as $asd)	{
			$date_array_element = substr($dateu[$i], 0, 7);
			$date_array[] = $date_array_element;
			$i++;
		}

		$month = array_unique($date_array);
		echo "<br><hr>Monthly Archive | ";
		$i=0;
		foreach ($dateno as $asd2) {
			if ($month[$i]!= "") {
				if (substr($news, 0, 7) == $month[$i]) {
					echo "<a>";
					$mf=explode("-",$month[$i]);
					$monthformat=$mf[1]."-".$mf[0];
					echo str_replace(substr($monthformat, 0, 2),$monthn[substr($monthformat, 0, 2)],str_replace('-','. ',$monthformat));
					echo "</a> | ";
				} else {
					echo "<a href=?news=".str_replace('. ','',substr($dateu[$i],0,7)).">";
					$mf=explode("-",$month[$i]);
					$monthformat=$mf[1]."-".$mf[0];
					echo str_replace(substr($monthformat, 0, 2),$monthn[substr($monthformat, 0, 2)],str_replace('-','. ',$monthformat));
					echo "</a> | ";
				}
			}
			$i++;
   		}

		} else {

		//first 20 news + 20 titles
			while ($row = mysql_fetch_assoc($result))	{

						if ($i<$onpage*3) {
//						echo "1<br>";
						$mf=explode("-",$row['submitted']);
						$monthformat=$mf[1]."-".$mf[2]."-".$mf[0];
						$content_href = "?news=".substr($row['submitted'],0,7)."#news".$row['id'];
						if ($i<$onpage) { $content_href=$row['titlelink']." target=_new"; };
						echo "<a name=news".$row['id']."><br><div class=newsdate>".$row['submitted']." </div><a class=newstitle href=".$content_href.">".$row['title']."</a><br>";
						if ($i<$onpage) {
//								echo "2<br>";
							echo "<div class=newstext>".nl2br($row['content'])."</div><br><hr>";
						}

					} else {
						$dates=$row['submitted'];
						$date[]=$dates;
						}
						$i++;
		}
	}

		$i=0;
    	$dateu = array_values(array_unique($date));
		$dateno=array_count_values($dateu);
		$date_array=array();
		foreach ($dateno as $asd)	{
			$date_array_element = substr($dateu[$i], 0, 7);
			$date_array[] = $date_array_element;
			$i++;
		}

	if (!$news){
		$month = array_unique($date_array);
		echo "<br><hr>Monthly Archive | ";
		$i=0;
		foreach ($dateno as $asd2) {
			if ($month[$i]!= "") {
				if (substr($news, 0, 7) == $month[$i]) {
					echo "<a>";
					$mf=explode("-",$month[$i]);
					$monthformat=$mf[1]."-".$mf[0];
					echo str_replace(substr($monthformat, 0, 2),$monthn[substr($monthformat, 0, 2)],str_replace('-','. ',$monthformat));
					echo "</a> | ";
				} else {
					echo "<a href=?news=".str_replace('. ','',substr($dateu[$i],0,7)).">";
					$mf=explode("-",$month[$i]);
					$monthformat=$mf[1]."-".$mf[0];
					echo str_replace(substr($monthformat, 0, 2),$monthn[substr($monthformat, 0, 2)],str_replace('-','. ',$monthformat));
					echo "</a> | ";
				}
			}
			$i++;
   		}
  	}
?>