Hirdetés

2024. május 3., péntek

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  PHP programozás (kiemelt téma)

Hozzászólások

(#19101) adika4444


adika4444
addikt

Sziasztok!

MYSQL és PHP egybe kérdésem lenne.
Adott egy forum_posts, forum_topics és forum_cats tábla.
A posts-nál írom a dátumot, tehát ki tudom választani a topikokat a legutóbb hozzászólthoz képest visszafelé rendezné, majd a topics táblából ki tudom nyerni a téma nevét az id alapján...
Viszont vannak kategóriák. Az, hogy egy topic melyik kategóriába tartozik, azt hogy tudnám úgy tárolni, hogy a listázásnál ki tudjam a legutóbbi hsz szerint választani az adott kategóriába tartozó topikokat?
A baj a több táblás lekérés.
Én arra gondoltam, hogy kiválasztani limit-tel a legutóbbit, aztán az előtte lévő topikot, majd lekérni a topik nevét a topics táblából, és vizsgálni hogy a kiválasztott kategóriába tartozik-e. Ha igen kiírom, és hozzáadok a $wrote változóhoz egyet, ha nem akkor meg lépek a következőre továbbra is limittel, és ellenőrzöm amit előbb írtam...
Bocs ha kicsit érthetetlenül fogalmaztam meg, de szerintem nem is a megfelelő irányból közelítem meg a problémát.
Segítségért köszi előre is!

[ Szerkesztve ]

üdv, adika4444

(#19102) DNReNTi válasza adika4444 (#19101) üzenetére


DNReNTi
őstag

Ahh... Tulbonyolitod.
Egy topik csak egy kategoria ala tartozhat? 1:n kapcsolat? Akkor egyszeruen kell egy mezo a topik tablaba, mittudomen category_id ami egyertelmuen azonositja. Ha egy topik tobb kategoria ala besorolhato akkor n:m kapcsolatrol beszelunk, kell tehat egy kapcsolotabla, ami tarolja hogy mely topic_id-k es category_id-k vannak osszerendelve. Akarhogy is, nem olyan bonyolult ez, szerintem te gondolod tul. ;)

but without you, my life is incomplete, my days are absolutely gray

(#19103) adika4444 válasza DNReNTi (#19102) üzenetére


adika4444
addikt

Egy topik maradjon egy kategóriában.
De ha odateszem a topik mellé hogy melyik kategóriába tartozik, akkor hogyan tudom a legutolsó 25 komment alapján a legutolsó 25 topikot kiválasztani? Mert a kommentek táblájában nem tudok arra szűrni hogy melyik kategória, hacsak nincs arra mód hogy úgy válasszak ki valamit hogy az egy másik táblában is megfeleljen adott feltételnek...

üdv, adika4444

(#19104) DNReNTi válasza adika4444 (#19103) üzenetére


DNReNTi
őstag

Mar hogyne lenne. Tessek elkezdeni ismerkedni az SQL JOIN kifejezessel / fogslmaval / tipusaival. ;)

but without you, my life is incomplete, my days are absolutely gray

(#19105) adika4444 válasza DNReNTi (#19104) üzenetére


adika4444
addikt

Utánanézek, köszi!:R

üdv, adika4444

(#19106) adika4444 válasza adika4444 (#19105) üzenetére


adika4444
addikt

Érthetetlen katyvasz ami leírást találtam róla :( úgyhogy most selectben select utasítással próbálom megoldani, eddig nagyobb a siker mint a join-nal...
Az a baj hogy a joinnál értelmetlenül sok sor jelenik meg, ha meg natural-lal használom akkor valahogy csak egy sort akar megmutatni...

üdv, adika4444

(#19107) DS39 válasza adika4444 (#19106) üzenetére


DS39
nagyúr

belső select-ek használata megnöveli a lekérdezés futási idejét.
mindenképp a táblák összekapcsolását javaslom, lehet azt join-nal, vagy simán a where-ben összekapcsolási feltétellel.

az egyik tábla elsődleges kulcsát kell összekapcsolni a másik tábla külső kulcsával. (egy a többhöz kapcsolat)

[ Szerkesztve ]

(#19108) adika4444 válasza DS39 (#19107) üzenetére


adika4444
addikt

Köszi, nekiugrok megint mert ez a belső lekérdezgetés több sebből is vérzik...
szerk:
Hogy kell ezt az összekapcsolásos dolgot a where-ben megcsinálni?

[ Szerkesztve ]

üdv, adika4444

(#19109) DS39 válasza adika4444 (#19108) üzenetére


DS39
nagyúr

itt elég jól bemutatják, mi a kettő között a különbség, meg egyáltalán, hogyan is kell:
https://softwareengineering.stackexchange.com/questions/78225/using-join-keyword-or-not
itt ki is tudod próbálni, a join variációk leírása mellett: [link]

[ Szerkesztve ]

(#19110) Jinxb1rd


Jinxb1rd
addikt

Sziasztok!

Adatbázisban a következő adatok vannak: 1_1, 2_2, 1,4_2, 15_15 (ezek csempeméretek cm-ben)

Ezeket sorbarendezve ORDER by termekSize-t használva, majd azt megformázva a következő lista alakul ki:
1x1
1,4x2
15x15
2x2

Van valami sql beállítás vagy php parancs, amivel lehetséges rendesen sorbarendezett listát kapni, tehát így:
1x1
1,4x2
2x2
15x15

?

[ Szerkesztve ]

We are only Stardust...

(#19111) Jinxb1rd válasza Jinxb1rd (#19110) üzenetére


Jinxb1rd
addikt

Félmegoldást sikerült kitalálni:

ORDER BY ABS(REPLACE(termekSize, ',', '.'))

Ezzel az első tagra vonatkozóan jól sorbarendezi, azonban a második tagnál már nem vesz figyelembe semmit.

CHARINDEX és a LEFT megoldásokkal szórakoztam még, de gondolom azért nem működik, mert nem minden esetben van találat charindexre és error-t dob.

[ Szerkesztve ]

We are only Stardust...

(#19112) Jinxb1rd válasza Jinxb1rd (#19111) üzenetére


Jinxb1rd
addikt

Végül csak php oldottam meg végül. Akit érdekelne esetleg:

function cmp_size($a, $b) {
$a_pieces = explode("_", $a);
$b_pieces = explode("_", $b);

for ($i=0; $i < 3; $i++) {
$a_temp = floatval(str_replace(',', '.', $a_pieces[$i]));
$b_temp = floatval(str_replace(',', '.', $b_pieces[$i]));

if ( $a_temp == $b_temp )
continue;
else
return ($a_temp < $b_temp) ? -1 : 1;
}

return 0;
}

uasort($size_array, 'cmp_size');

[ Szerkesztve ]

We are only Stardust...

(#19113) Tapsi válasza Jinxb1rd (#19110) üzenetére


Tapsi
addikt

Nekem logikai problémám van ezzel. Mi a rendezés például 2x3, 3x2 csempe esetén? Ilyesmit mi mindig egy plusz sort_order mezővel szoktunk megoldani nagyobb projektekben.

(#19114) Pocok256 válasza Jinxb1rd (#19110) üzenetére


Pocok256
veterán

Ha nagyon sql el akarod akkor létrehozol egy viewet ahol normálisan rendezet lesz hossz és magasság aztán azt már tudod szépen rendezni. Tekintheted a viewet egy segédtáblának is.

HODL $GME, DIAMOND HANDS, APES STRONG TOGETHER

(#19115) bucihost


bucihost
senior tag

Sziasztok!

Adott egy mysql adatbázis, amibe egy program logolja a szerverre csatlakozott IP címeket.

ID IPPORT IDO

amikor le akarok kérdezni az adatbázisból egy adott ip+port párost,

SELECT *
FROM `ipadatbazis`
WHERE ipport = 'xxx.xxx.xxx.xxx:xxxx'

akkor ezt kapom vissza:

A MySQL üres eredményhalmazt adott vissza (pl. nulla sorok). (a lekérdezés 0.0003 másodpercig tartott)

Mi lehet a nyűge? ha ID-re vagy IDO-re szűrök rá, akkor lehoz mindent amit kell :F :R

(#19116) DS39 válasza bucihost (#19115) üzenetére


DS39
nagyúr

az ipport oszlopnak mi a típusa?
próbáld meg hogy varchar-rá konvertálod, és úgy teszed egyenlővé a feltételeddel.

(#19117) bucihost válasza bucihost (#19115) üzenetére


bucihost
senior tag

Rájöttem közben. ... :W

A beíró script minden row végére oda rakta a \n-t.
beírás után plus sor:
UPDATE ipadatbazis SET ipport = REPLACE(ipport, '\n', '');

így már jó a lekérdezés is
:R

(#19118) Lacc válasza Jinxb1rd (#19112) üzenetére


Lacc
aktív tag

Tapsi felvetése jogos, de SQL arthmetic operátorok is jók ide :). Én mindenképp szorzással gondolkodom. Azzal meglehet kapni a kívánt sorrendet a példád alapján. Így fejben nézve..., nekem az ilyen szorzások csak terület számításnak tűnnek

Ötletnek esetleg tárolt eljárást lehet írni, igaz nem kötelező, de jobb.
1. Arról van szó, hogy a csempe méretnél ott az X ahelyett jobb lenne a * mint szorzás, azt lehet parselni, vagy regex-szel kiszedni és összeszorozni, az értéket a szórzás jeltől álló bal és jobb operandusokat.
2. Lehetőségként split-elni, azt a stringet, és úgy is lehet szorozni.
Az 1. és 2.-ra itt találsz egy példát, amitől elmegy majd a kedved.
De külön itt is van, hogy a varchar szereplő matematikai kifejezést hogyan lehet exec-elni.
3. A kedvencem, és ez lenne az ideális szerintem: 1 oszlop a szélességnek és 1 oszlop a magasságnak. Nem tudom, hogy mennyire tudsz migrációt végrehajtani az adattáblán (technikai, vagy üzleti okok miatt)
Itt is szorzással lehetne a méreteket meghatározni, ez lehetne az első ORDER BY kritérium. Második kritériumnak pedig ottlehetne hogy a csempe szélesség vagy magasság alapján rendezne. Így lazán elkerülhető sort_order (Tapsi javaslata alapján) a 3x2 és 2x3 dilemma, mert ugye második ORDER BY kritérium ezt tudná tisztázni is. (Kivéve ha manuálisan akarjátok ezt is állítani, akkor van értelme a sort_order-nek).
Bár ilyen esetben ott van a 24-es csapda. 4x6, 6x4, 3x8, 8x3, 2x12, 12x2-es méretek. Itt is lehet kell a sort_order, bár ez tényleg a megrendelői kritérium alapján dől el.

[ Szerkesztve ]

(#19119) bucihost


bucihost
senior tag

ismét itt...

Adott egy php script, ami lefuttat egy parancsot (curl).
A lényeg az (lenne) hogy mindaddig futtatja a curlokat, amíg a sikeres futások száma el nem éri az 5-öt.
(leszedi a pid et, majd ha fut akkor mysqlbe +1-el)

<?
$aktualis = mysql_query("SELECT * from `ipadatbazis` where id = 1");
$aktleker = mysql_fetch_array($aktualis);
$aktszam = $aktleker['szamlalo'];
$maximum = '5';

if ($aktszam < $maximum)
{
$i=0;
$sqllekerd = mysql_query("SELECT * FROM `ipadatbazis`");
While($lekerdadat = mysql_fetch_array($sqllekerd))
{
$i++;
$command = "";
$pid = exec($command, $output);
sleep(1);
exec("ps -p $pid", $kimenet);
if (count($kimenet) > 1)
{
$plusz = "UPDATE `ipadatbazis` SET `szamlalo` = szamlalo+1 where id = 1";
mysql_query($plusz);
}
}
}
else
{
die();
mysql_close($kapcsolat);
}
?>

Addig eljut, hogy elkezdi az $commandot futtatni egymás után valamint +1 el az adatbázisba, viszont ha eléri az az 5-ös "limitet" nem áll meg. Futtatja magát a végtelenségig amig ki nem lövöm kézzel. Ha kilövöm és újra elindítom a php-t akkor már nem fut le, mivel az adatbázisban szereplő szám jóval több mint 5. Mi lehet a gond, mit rontottam el? :R

[ Szerkesztve ]

(#19120) SUPREME7 válasza bucihost (#19119) üzenetére


SUPREME7
őstag

Akkor az ellenőrzésnek a while cikluson belül kellene lennie, nyilván amikor még kevesebb mint 5 akkor elkezd futni, de utána nincs kontroll.

És akkor csak szimplán ki kell lépned a ciklusból egy break-kel.

While(... )
{
$i++;
if ($i > $maximum) {
break;
} else...

}

A te példádban ugyan elkezdted az $i-t emelgetni de nem kezdtél vele semmit. Gondolom fejben megvolt ez valamikor :)

[ Szerkesztve ]

(#19121) sztanozs


sztanozs
veterán

Mi lenne, ha a beillesztett kódok rendesen lennének indentálva? Persze tudom, a kód gomb használatának is már örülnöm kéne... :(((

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#19122) SUPREME7 válasza sztanozs (#19121) üzenetére


SUPREME7
őstag

Én mobilról pötyögtem, de hosszabb kódnál ja, nem ártana :)

(#19123) fordfairlane válasza sztanozs (#19121) üzenetére


fordfairlane
veterán

Az indentálás a kisebb probléma. Globális változók, mysql_* függvények, short open tag, n+1 query használata, na ez a problémás.

[ Szerkesztve ]

x gon' give it to ya

(#19124) simondr


simondr
senior tag

Sziasztok!

jórészt PHP-ban íródott weblap fejlesztéséhez keresek embert. Számlaképesség kötelező.
6-8-10 órás fejleszésekről lenne szó.

Akit érdekel privátban keressen. Köszönöm!

(#19125) func93


func93
senior tag

Sziasztok!

Inkább kezdő php-s volnék. Hogyan lehetne a legegyszerűbben megoldani azt, hogy pl: egy reg. űrlapnál adott inputokba csak betűket, vagy csak számokat lehessen írni?

"Nem lehet összekötni a pontokat a jövőt fürkészve, az összefüggések csak utólag visszanézve látszanak." - Steve Jobs

(#19126) Zedz válasza func93 (#19125) üzenetére


Zedz
addikt

Szia,

Javascripttel. De mivel kliens oldalon boldog-boldogtalan tudja módosítani az oldalad, ezért szerver oldalon mindenképp validálnod kell majd a beérkező adatokat.

(#19127) fordfairlane válasza func93 (#19125) üzenetére


fordfairlane
veterán

Legegyszerűbben a html5 validációs mechanizmussal, ami többé kevésbé már egyre jobban támogatott fícsör a modern böngészőkben.

HTML5 Form Validation With the “pattern” Attribute

Létezik validációs jquery plugin, sőt pluginok is, ami kompatibilis a régebbi böngészőkkel. jQuery Validation Plugin

Az igazi validáció a domain layer feladata, tehát szerveroldalon is el kell végezni az adatok validálását.

x gon' give it to ya

(#19128) func93 válasza fordfairlane (#19127) üzenetére


func93
senior tag

zedz,fordfairlane: Köszi! :)

"Nem lehet összekötni a pontokat a jövőt fürkészve, az összefüggések csak utólag visszanézve látszanak." - Steve Jobs

(#19129) mobal válasza func93 (#19128) üzenetére


mobal
MODERÁTOR

Utána még egyszer szerver oldalon illik ellenőrizni mert ki lehet huncutkodni ennek ellenére is :U

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#19130) trisztan94


trisztan94
őstag

Sziasztok,

Valószínű triviális a kérdésem.

Adott a következő array:

array:2 [▼
0 => array:4 [▼
"user_id" => "4"
"total_rows" => "250"
"delete_member" => "0"
"phase" => "3"
]
1 => array:4 [▼
"user_id" => "3"
"total_rows" => "1050"
"delete_member" => "1"
"phase" => "1"
]
]

Szeretném rendezni a total_rows alapján. Tehát az legyen a legfelső tömb első eleme, amelyiknek a legnagyobb a total_rows értéke.

array_multisort-al próbálkoztam eddig, de nem sikerült.

Hogyan kellene ezt megcsinálni?

https://heureka-kreativ.hu

(#19131) Doink válasza trisztan94 (#19130) üzenetére


Doink
aktív tag

<?php
$data = [
['total_rows' => 1, 'edition' => 2],
['total_rows' => 98, 'edition' => 2],
['total_rows' => 67, 'edition' => 7]
];
foreach ($data as $key => $row) {
$total[$key] = $row['total_rows'];
}
array_multisort($total, SORT_DESC, $data);

var_dump($data);
?>

Ha a számaid stingként vannak tárolva (macskakörmöt látok a példádban) akkor:
array_multisort($total, SORT_DESC, SORT_NUMERIC, $data);

[ Szerkesztve ]

(#19132) disy68 válasza trisztan94 (#19130) üzenetére


disy68
aktív tag

Használj inkább usort-ot:

function cmp($a, $b) {
return $a["total_rows"] - $b["total_rows"];
}
usort($arr, "cmp");

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#19133) trisztan94 válasza disy68 (#19132) üzenetére


trisztan94
őstag

Néztem a usort-ot, de valamiért nagyon furcsán működik:

Ha a total_rows index alapján rendezem, nem történik semmi:

usort($array, function($a, $b) {
return intval($a['total_rows']) <=> intval($b['total_rows']);
});

Output:

array:2 [▼
0 => array:4 [▼
"user_id" => "4"
"total_rows" => "250"
"delete_member" => "0"
"phase" => "1"
]
1 => array:4 [▼
"user_id" => "3"
"total_rows" => "1050"
"delete_member" => "0"
"phase" => "3"
]
]

De ha más, jelen példában a user_id alapján, akkor működik ahogy kéne:

usort($project_members, function($a, $b) {
return intval($a['user_id']) <=> intval($b['user_id']);
});

Output:

array:2 [▼
0 => array:4 [▼
"user_id" => "3"
"total_rows" => "1050"
"delete_member" => "0"
"phase" => "3"
]
1 => array:4 [▼
"user_id" => "4"
"total_rows" => "250"
"delete_member" => "0"
"phase" => "1"
]
]

Mi nem tetszik neki a total_rows-ban? :F

[ Szerkesztve ]

https://heureka-kreativ.hu

(#19134) trisztan94 válasza trisztan94 (#19133) üzenetére


trisztan94
őstag

Wow, oké, rájöttem.

Helyesen rendezte ez, csak én csökkenő sorrendbe akartam rakni és valamiért feltételeztem, hogy telepatikus a php... :W

Bocsi, meghalt az agyam egy kicsit. :DDD

https://heureka-kreativ.hu

(#19135) trisztan94


trisztan94
őstag

Sziasztok!

MySQL LOAD DATA INFILE-al egy nagy csv-t próbálok importálni adatbázisba. 500.000 sor, 93 oszlop és kb 600mb a fájlméret, InnoDB az AB motor (tudom, hogy MYISAM-al gyorsabb, de kötve vagyunk az innodb-hez).

Ez az import kódom:

$query = "LOAD DATA CONCURRENT LOCAL INFILE '$path'
INTO TABLE task_metas
CHARACTER SET utf8mb4
FIELDS TERMINATED BY '$delimiter'
OPTIONALLY ENCLOSED BY '$enclosed'
LINES TERMINATED BY '$lineending'
IGNORE 1 LINES
(@col1, @col2, @col3, @col4, @col5, @col6, @col7, @col8, @col9, @col10, @col11, @col12, @col13, @col14, @col15, @col16, @col17, @col18, @col19, @col20, @col21, @col22, @col23, @col24, @col25, @col26, @col27, @col28, @col29, @col30, @col31, @col32, @col33, @col34, @col35, @col36, @col37, @col38, @col39, @col40, @col41, @col42, @col43, @col44, @col45, @col46, @col47, @col48, @col49, @col50, @col51, @col52, @col53, @col54, @col55, @col56, @col57, @col58, @col59, @col60, @col61, @col62, @col63, @col64, @col65, @col66, @col67, @col68, @col69, @col70, @col71, @col72, @col73, @col74, @col75, @col76, @col77, @col78, @col79, @col80, @col81, @col82, @col83, @col84, @col85, @col86, @col87, @col88, @col89, @col90, @col91, @col92, @col93)
SET task_id=null, project_id=$project->id, full_comment=null, relevance=-1, note=null,
url=@col1, indexed=@col2, published=@col3, search_indexed=@col4, title_snippet=@col5, content_snippet=@col6, title=@col7, content=@col8, root_url=@col9, domain_url=@col10, host_url=@col11, parent_url=@col12, lang=@col13, porn_level=@col14, fluency_level=@col15, spam_level=@col16, sentiment=@col17, source_type=@col18, post_type=@col19, cluster_id=@col20, meta_cluster_id=@col21, tags_internal=@col22, tags_marking=@col23, tags_customer=@col24, entity_urls=@col25, images_url=@col26, images_width=@col27, images_height=@col28, images_legend=@col29, videos_url=@col30, videos_width=@col31, videos_height=@col32, videos_legend=@col33, pagemonitoring_sitemon_siteid=@col34, matched_profile=@col35, article_extended_attributes_facebook_shares=@col36, article_extended_attributes_facebook_likes=@col37, article_extended_attributes_twitter_retweets=@col38, article_extended_attributes_url_views=@col39, article_extended_attributes_pinterest_likes=@col40, article_extended_attributes_pinterest_pins=@col41, article_extended_attributes_pinterest_repins=@col42, article_extended_attributes_youtube_views=@col43, article_extended_attributes_youtube_likes=@col44, article_extended_attributes_youtube_dislikes=@col45, article_extended_attributes_instagram_likes=@col46, article_extended_attributes_twitter_shares=@col47, article_extended_attributes_num_comments=@col48, source_extended_attributes_alexa_pageviews=@col49, source_extended_attributes_facebook_followers=@col50, source_extended_attributes_twitter_followers=@col51, source_extended_attributes_instagram_followers=@col52, source_extended_attributes_pinterest_followers=@col53, extra_article_attributes_world_data_continent=@col54, extra_article_attributes_world_data_country=@col55, extra_article_attributes_world_data_country_code=@col56, extra_article_attributes_world_data_region=@col57, extra_article_attributes_world_data_city=@col58, extra_article_attributes_world_data_longitude=@col59, extra_article_attributes_world_data_latitude=@col60, extra_author_attributes_id=@col61, extra_author_attributes_type=@col62, extra_author_attributes_name=@col63, extra_author_attributes_birthdate_date=@col64, extra_author_attributes_birthdate_resolution=@col65, extra_author_attributes_gender=@col66, extra_author_attributes_image_url=@col67, extra_author_attributes_short_name=@col68, extra_author_attributes_url=@col69, extra_author_attributes_world_data_continent=@col70, extra_author_attributes_world_data_country=@col71, extra_author_attributes_world_data_country_code=@col72, extra_author_attributes_world_data_region=@col73, extra_author_attributes_world_data_city=@col74, extra_author_attributes_world_data_longitude=@col75, extra_author_attributes_world_data_latitude=@col76, extra_source_attributes_world_data_continent=@col77, extra_source_attributes_world_data_country=@col78, extra_source_attributes_world_data_country_code=@col79, extra_source_attributes_world_data_region=@col80, extra_source_attributes_world_data_city=@col81, extra_source_attributes_world_data_longitude=@col82, extra_source_attributes_world_data_latitude=@col83, engagement=@col84, reach=@col85, provider=@col86, generator_type=@col87, source_extended_attributes_alexa_unique_visitors=@col88, article_extended_attributes_twitter_likes=@col89, extra_author_attributes_description=@col90, article_extended_attributes_linkedin_shares=@col91, extra_source_attributes_name=@col92, word_count=@col93,
created_at=NOW(), updated_at=NOW()";

A query futtatása után visszakapok egy számot arról,hogy mennyi sor került be adatbázisba, ami eddig mindig helyes volt.

A probléma az, hogy amikor megnézem az adatbázist, sokszor nem annyi sort pakol be rögtön, mint amenynit visszaad a query. 519.000-nek kellene lennie, de pl. a legutóbbi importnál csak 463.000 volt. Ennél furcsább, hogy ha pár mp múlva újra lekérem az ab táblát, már több sort mutat benne - kb 1000-esével növekedik cca 30mp-enként.

Tehát nagyjából egy 40p alatt felmegy a tényleges 519.000 sorra az inserted sorok száma.

Ez miért van? Olyan, mintha utólag aszinkron pakolná be a sorokat. Ki lehet ezt valahogy kerülni?

+ update

Még az is furcsa, hogy az importált sorok lekérésénél, amikor még fut ez az aszinkron 'utóimport(?)' elszáll a szerver memóriatúllépés miatt, de csak ha azokat a sorokat kérem le. Ha egy korábban futtatott import sorait kérem le, no problemo.
Olyan lehet, hogy a MYSQL szerver lecache-elte azokat a sorokat amire már nem volt elég memóriája és szépen üríti? Szintén szuper lenne ide egy megoldás :)

[ Szerkesztve ]

https://heureka-kreativ.hu

(#19136) Doink válasza trisztan94 (#19135) üzenetére


Doink
aktív tag

A CONCURRENT kulcsszó miatt tudsz SELECT-eket futtatni a lefutás közben mert a tábla ilyenkor nem lockolódik. Vagyis amikor te futtatod a selectedet akkor ő még javában dolgozik a lekérdezéseden.

(#19137) tacsko833


tacsko833
csendes tag

Sziasztok,

Most kezdtem php-t tanulni könyvből(php 24 óra alatt...így nincs aki segítsen, gondoltam kérdezek itt, remélem nem gond.

Van egy kód, amiben nem értem a változókat...

<html>
<head>
<title>4.1. program Dinamikusan beállított és elért
változók</title>
</head>
<body>
<?php
$tarolo = "felhasznalo";
$$tarolo = "Anna";
// lehetne egyszerûen csak:
// $felhasznalo = "Anna";
// vagy
// ${"felhasznalo"} = "Anna"
// persze ekkor nem kellenek dinamikus változók
print "$felhasznalo<br>";
print $$tarolo;
print "<br>";
print "${$tarolo}<br>";
print "${'felhasznalo'}<br>";
?>
</body>
</html>

Itt én szerintem van két változónk: a taroló(aminek az értéke felhasznalo), és a $tarolo(aminek az értéke Anna)

Mégis az első kiíratásnál a $ jel után az első tároló értéke van beírva, holott ez csak egy érték...nem egy változó. A képernyőn viszont az Anna felírat jelenik meg. Nemértem :W

Kicsi segítséget kérhetnék, hogy van ez? :F

(#19138) disy68 válasza tacsko833 (#19137) üzenetére


disy68
aktív tag

Dinamikus változók, az én ízlésemnek kicsit túl dinamikus :)

Szóval:
1. A $tarolo változó értéke lesz: "felhasznalo"
$tarolo = "felhasznalo";
2. A $felhasznalo változó értéke lesz: "Anna" ($$tarolo ->$felhasznalo => "Anna")
$$tarolo = "Anna";

És a fenti deklarációk esetében az alábbiak ekvilalensek:
$$tarolo === ${$tarolo} === ${'felhasznalo'} === $felhasznalo

És lehet ezt még tetőzni $$$tarolo, stb..

[ Szerkesztve ]

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#19139) tacsko833 válasza disy68 (#19138) üzenetére


tacsko833
csendes tag

Én még anno Turbo Pascalt tanultam :) Ott a program elején deklaráltunk változókat.
Itt oké, hogy $tarolonak az értéke "felhasznalo" string az értéke... csak azt nem értem ebből a stringből hogy lett változó úgy hogy nem deklaráltuk? :) Itt nem a $ jel a változó deklarálását jelenti?

Nagyon nem vágom, bocs hogy akadékoskodom :(

[ Szerkesztve ]

(#19140) disy68 válasza tacsko833 (#19139) üzenetére


disy68
aktív tag

A $valami egy változó, ami futás során kerük kiértékelésre.
A $$valtozo szintén egy változó, aminek a neve a $valtozo értéke. A php feldolgozó addig oldja fel változóként a $ utáni szoveget, amíg el nem jut az első $ jelig, az így kapott eredmény egy változó lesz (függően a helyétől a kifejezésben deklaráció, ha eddig nem létezett, hivatkozás vagy érték).

Egy szemléltető példa a lentebb linkelt php manual hozzászólásaiból:
<?php

//You can even add more Dollar Signs

$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";

$a; //Returns Hello
$$a; //Returns World
$$$a; //Returns Foo
$$$$a; //Returns Bar
$$$$$a; //Returns a

$$$$$$a; //Returns Hello
$$$$$$$a; //Returns World

//... and so on ...//

Miért? Mert a php megengedi :DDD bővebben

És persze erről jó tudni, de szerintem ilyesmi mágiákat nem igazán kifizetődő használni, mert nem túl átlátható.

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#19141) tacsko833 válasza disy68 (#19140) üzenetére


tacsko833
csendes tag

disy68 köszi a példát, a tiédet értem is, de az én példámat nem vágom :)

Az enyémben :

$tarolo = "felhasznalo";
$$tarolo = "Anna";

print "$felhasznalo<br>"; // Returns Anna ---ez a felhasznalo egy érték, ezt nem értem, hogy lett $$tarolo érték belőle
print $$tarolo; //Returns Anna

Megpróbálom átírni a te példádra akkor :)

$Hello = "felhasznalo";
$a = "Anna";

$felhasznalo; //Returns ANNA ~ami így nemigen működik :)
$a; //Returns ANNA

(#19142) tacsko833


tacsko833
csendes tag

Bocs, hogy értetlenkedek, csak szeretném megérteni :(

(#19143) Doink válasza tacsko833 (#19141) üzenetére


Doink
aktív tag

A $$tarolo ugyan az mintha azt írnád hogy $felhasznalo HA $tarolo = 'felhasznalo'.
Becsületesen kiírva ez történik:
${$tarolo} => ${'felhasznalo'} => $felhasznalo

Szóval ha az van írva a kódba hogy $$tarolo = "Anna" akkor valójában $felhasznalo = "Anna" hajtódik végre
HA a $tarolo értéke 'felhasznalo'.

Dinamikus változóneveknek érdemes elkerülni mert átláthatatlan kódot eredményez és nehéz példát mondani arra amikor értelme van normális adatszerkezetek használata helyett.

(#19144) Lacc válasza tacsko833 (#19142) üzenetére


Lacc
aktív tag

Doink, jól mondta. Sőt, Doink jól mutatta ${$valami}, ezt a {} formátumot érdemes megjegyezni (lásd lentebb).
Dinamikus változóval nem kell ennyire foglalkozni, de gyakorlással felfogható.

Dinamikus változó szemlélete, inkább a Reflection témakörében fordul elő. Ha nem nagyon érdekel az Architekt, akkor valszeg sosem fogsz vele találkozni. Viszont hasznos is tud lenni a dinamikus elérés :)

Lásd: Dinamikusan tudsz a Foo-nak létrehozni property-t
class Foo{
public function createProperty($name, $value){
$this->{$name} = $value;
}
}

$foo = new Foo();
$foo->createProperty('hello', 'something');
print $foo->hello //something

Bár most nézve a PHP doc-ot, az első hivatalos példa, pont a variable property. A felhasználók példájánál már ott van a 3. és 4. példa is.
Ez a negyedik kivételesen jó példa:

class Foo {
public function hello() {
echo 'Hello world!';
}
}
$my_foo = 'Foo';
$a = new $my_foo();
$a->hello(); //prints 'Hello world!'

Ebből is látszik, hogy egy osztály objektumát az osztály neve alapján hogyan lehet létrehozni, itt az osztály neve egy sima string érték a $my_foo változóban. Ezzel kapcsolatos kérdéssel már sok helyen találkoztam, és én is csináltam, mert egyszerű, átláthatóbb és a PHP haver ebben.

Reflection-nél pedig a példában a foreach-es részt nézném át.

(#19145) disy68 válasza Lacc (#19144) üzenetére


disy68
aktív tag

A dinamikus osztály példányosítás mellé a metódus hívást tenném még hozzá, mint hasznos feature, ezeket alkalmaztam már én is. Ezek mellé hasznos lehet még a class_exists() és a method_exists().

class Something {
public function someMethod() {
echo "something";
}
}

// máshol
$className = "Something";
$methodName = "someMethod";

if (class_exists($className)) {
$something = new $className();
if (method_exists($something, $methodName)) {
$something->$methodName(); // echo "something";
} else {
// do something when method does not exist
}
} else {
// do something when class does not exist
}

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#19146) tacsko833 válasza disy68 (#19145) üzenetére


tacsko833
csendes tag

Köszönöm a válaszokat...mondjuk úgy, hogy értem :) Mivel még csak most tanulom a phpt, nem hiszem hogy alkalmazni fogom, de nem akartam úgy elmenni mellette, hogy lövésem sincs róla :) Köszönöm még1x! :DD

[ Szerkesztve ]

(#19147) Lacc válasza disy68 (#19145) üzenetére


Lacc
aktív tag

Az en celom csak a variables variable korlatozodott, nem volt celom a teljeskoru kirefelgetes. :)

Akkor ott van meg a property_exists() metodus, csak hogy meglegyen a teljesseg igenye :).
Meg ugye bejon mas is, amirol hallgattam a peldaban, ugye a amit leirtasl fuggvenyeket azok a "Class/Object functions" gyujtoneven talalhatoak meg.

Viszont ezert sem erdemes belemenni melyebben forumon, de meg kell emliteni, ha itt van a method_exists() hogy az nem egyenlo a function_exists()-el. Viszont ami miatt muszaj voltam irni, az az, hogy a method_exists() csak megnezni, hogy az adott osztalynak van-e olyan nevu fuggvenye. Nos ez tobb esetben is TRUE-t add visza. Sajnos akkor is TRUE jon, ha statikus metodus. Ilyen esetben ha statikus metodust probalsz meg peldanyszintukent hivni akkor jon az Exception. Masik ami miatt ez rossz, hogy ez TRUE-t add vissza, ha metodus lathatosaga private vagy protected. Ebben az esetben jobb az is_callable() amely le is csekkolja, hogy tenyleg megtudod-e hivni?!
Masik, hogy az is_callable() kiszuri a magic metodusokat, mint a __constructor. A method_exists() ugyanugy TRUE-t add vissza.
Radasul az is_callable() jo parositast alkot a __call magich method-dal.

Ennel sokkal jobb a ReflectionClass, tobb informacio es szuresi lehetoseg van.

De ez elegge mar advanced tema. (Nekem nincs tobb idom most ezt kifejteni)

[ Szerkesztve ]

(#19148) Janaboy


Janaboy
veterán

Sziasztok,

Lenne itt olyan PHP+mysql szaki aki segitene nekem szívesen egy API "megirasaban"?
Van egy kesz githubon elerheto rendszer, csak at kellene dolgozni.
Sajna en a kód megirasahoz süket vagyok, de remélhetőleg tudok szolgálni a szükséges adatokkal.
Ha van aki szívesen segitene es szanna ra idot, akkor irjon privit es leirom az egeszet cakkpakk.

Koszi,
Udv

[ Szerkesztve ]

Janaboy

(#19149) DS39


DS39
nagyúr

Van valakinek tapasztalata az ATW.hu-s ingyenes tárhellyel és domainnel?

redirect linkhez ezt szoktam használni:
"http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

Ezzel megkapom, hogy, pl: http://www.valami.hu/index.php?id=7 -> tehát a teljesen url-t paraméterekkel együtt.
na most ezen az oldalon a REQUEST_URI a paramétereket nem tartalmazza, és nem jövök rá, hogy miért? illetve milyen más módon tudnám ezt megkapni?

[ Szerkesztve ]

(#19150) SUPREME7 válasza DS39 (#19149) üzenetére


SUPREME7
őstag

Ha jól rémlik az atw-n van az a felső bannersáv az ingyenes tárhelynél és az oldalad iframe-be dobja be, lehet ez a gond.

Útvonal

Fórumok  »  Szoftverfejlesztés  »  PHP programozás (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.