Események összekötése egy szempont alapján

Események összekötése egy szempont alapján
2018-08-28T12:06:43+02:00
2018-08-29T12:21:50+02:00
2022-10-15T21:31:09+02:00
Atis1985
Sziasztok.
A kérdésem a következő lenne: Van egy eseményem amelynek van egy kezdődátuma ill. egy befejezés dátuma. Van egy másik eseményem amelynek szintén van egy kezdő ill. végpontja. A két eseményt össze szeretném kötni (pl. egy másik tábla azonos id-ja alapján). Egyként szeretném mozgatni, tehát ha dátum alapján rákeresünk az első eseményre, akkor megjelenjen a másik esemény is, függetlenül hogy a másik esemény kezdés ill. befejezése nem azon a napon van. Group by-al próbálkoztam de, az összesíti az adatokat, és nem jelenik meg az összes esemény.

A lekérdezésem jelenleg így néz ki:

$test=" SELECT * FROM freights LEFT JOIN freight_orders ON freights.freight_orders_id= freight_orders.freight_orders_id LEFT JOIN freight_date ON freights.freights_id = freight_date.freights_id WHERE freight_date BETWEEN '{$begin}' AND '{$end}'"; $result = mysqli_query($dbconn,$test);
Így ezzel megjelennek külön-külön az események, de valahogy én össze szeretném kötni a másodlagos kulcsok alapján is.
Mutasd a teljes hozzászólást!
A topicnyitó kérdésedhez (a 3. tábla kihagyásával) valami ilyesmit el tudok képzelni (nem teszteltem):

SELECT `e2`.* FROM `csoportesemenyek` `cs` INNER JOIN `esemenyek` `e` ON (`cs`.`id` = `e`.`csoportesemeny_id`) RIGHT JOIN `esemenyek` `e2` ON (`cs`.`id` = `e2`.`csoportesemeny_id`) WHERE (`e`.`esemeny_kezdet_datum` BETWEEN [intervallum_kezdet] AND [intervallum_veg]) OR (`e`.`esemeny_veg_datum` BETWEEN [intervallum_kezdet] AND [intervallum_veg])
A kiemelt [intervallum_kezdet] és [intervallum_veg] értelemszerűen behelyettesítendő a vizsgált időszak dátumaival.

Illetve hogyan lehetne egyszerre feltölteni a tömböt a kezdő ill. végződő esemény dátumával?

Bevallom, nem igazán értem ezt a dátum-mizériát (ezért simán lehet, hogy hülyeséget fogok írni), de mi akadályoz meg abban, hogy ne 1, hanem 2 új elemet adj a tömbhöz?

$days[$row['kezdet_datum_mezo_neve']] []= ... $days[$row['veg_datum_mezo_neve']] []= ...
Továbbra sem látom értelmét egy ilyen 3. táblának...
Mutasd a teljes hozzászólást!

  • Mutasd meg néhány minta eseménnyel, hogy a beidézett select alapján
    - milyen eredményhalmazt kapsz most
    - milyen eredményhalmazt szeretnél kapni
    - pontosan milyen mező(k) és logika alapján kell összekötni az eseményeket
    Mutasd a teljes hozzászólást!
  • SQL adatbázis
    3 db tábla van:
    1. tábla:
          csoportesemény_id, csoportesemény leírása.
    2. tábla (Események egyesével):
          esemény_id, csoportesemény_id, esemény_kezdet_dátum, esemény_vége_dátum, esemény_leírása
    3. tábla (Csoport események dátum tábla)
         Id, csoport_esemény_id, csoport_esemény_dátum

    Cél: Csoport esemény kiíratása két dátumérték között. Ha az egy csoportba tartozó bármelyik esemény kezdete vagy vége
    benne van a kiválasztott daterange-be akkor a komplett csoport tagja íródjanak ki. (Azok is amely dátumjai tartoznak a kiválasztott dátumok közé, de a csoport egyik tagja benne van.)

    Mintaadatok:
    1. tábla (csoportesemenyek):
                   Id       csoportesemény_leírása
                   1            2 részes verseny

    2. tábla(esemenyek):
             esemeny_id     csoportesemény_id      esemény_kezdet_dátum       esemény_vége_dátum       esemény_leírása
                    1                             1                                 2018.01.01                        2018.01.02                    Verseny 1. része
                    2                             1                                 2018.03.04                        2018.03.06                    Verseny 2. része

    3. tábla(csoportesemenyek_datumai):
                 Id                csoportesemény_id        csoportesemény_dátum
                 1                             1                                  2018.01.01
                 2                             1                                  2018.01.02
                 3                             1                                  2018.03.04
                 4                             1                                  2018.03.06

    A 2. tábla alapján szúrom be a 3. tábla adatait, mindegyik kap egy sort, ahol esemény kezdet vagy vég van. Ehhez hozzárendelem
    a megfelelő csoportesemény id-t.

    SQL query:

    SELECT *
    FROM esemenyek
    LEFT JOIN csoportesemenyek ON csoportesenyek.id = esemenyek.csoportesemény_id
    LEFT JOIN csoportesemenyek_datumai ON csoportesemények.id = esemenyek.csoportesemények_id
    WHERE csoportesemenyek_datumai BETWEEN '{$csoportesemény_dátum}' AND '{$csoportesemény_vége}'";
    $result = mysqli_query($dbconn,$test);

    while($row = mysqli_fetch_assoc($result)) {
    $days[$row['csoportesemény_datuma']][]=$row;
    }

    A dolog így működik. Szerinted ez így helyes megoldás?
    Mutasd a teljes hozzászólást!
  • A 3. tábla ha jól látom, akkor a 2-es tábla dátumait (kezdő és vég) tartalmazza.
    Ez csak egy mostani véletlen, vagy tényleg így van mindig?
    Ha így van mindig, akkor miért van így... miért kell egyáltalán?
    Mutasd a teljes hozzászólást!
  • Igen jól látod, azok a 2. tábla adatai alapján jönnek létre a 3. tábla adatai. Azért gondoltam erre mert amikor mentem el (ahogy tegnap beszéltük), így töltöm fel:

    while($row = mysqli_fetch_assoc($result)) { $days[$row['csoportesemény_datuma']][]=$row; }
    Ha kihagyom ezt a táblát akkor csak vagy az esemény kezdete vagy az esemény vége alapján tudom feltölteni, és vagy a kezdet vagy a vége akkor meg kimarad a listából.  Ez így nagy eretnekség?? Illetve hogyan lehetne egyszerre feltölteni a tömböt a kezdő ill. végződő esemény dátumával?
    Mutasd a teljes hozzászólást!
  • A topicnyitó kérdésedhez (a 3. tábla kihagyásával) valami ilyesmit el tudok képzelni (nem teszteltem):

    SELECT `e2`.* FROM `csoportesemenyek` `cs` INNER JOIN `esemenyek` `e` ON (`cs`.`id` = `e`.`csoportesemeny_id`) RIGHT JOIN `esemenyek` `e2` ON (`cs`.`id` = `e2`.`csoportesemeny_id`) WHERE (`e`.`esemeny_kezdet_datum` BETWEEN [intervallum_kezdet] AND [intervallum_veg]) OR (`e`.`esemeny_veg_datum` BETWEEN [intervallum_kezdet] AND [intervallum_veg])
    A kiemelt [intervallum_kezdet] és [intervallum_veg] értelemszerűen behelyettesítendő a vizsgált időszak dátumaival.

    Illetve hogyan lehetne egyszerre feltölteni a tömböt a kezdő ill. végződő esemény dátumával?

    Bevallom, nem igazán értem ezt a dátum-mizériát (ezért simán lehet, hogy hülyeséget fogok írni), de mi akadályoz meg abban, hogy ne 1, hanem 2 új elemet adj a tömbhöz?

    $days[$row['kezdet_datum_mezo_neve']] []= ... $days[$row['veg_datum_mezo_neve']] []= ...
    Továbbra sem látom értelmét egy ilyen 3. táblának...
    Mutasd a teljes hozzászólást!
  • Szia,
    Átírtam erre:

    $days[$row['kezdet_datum_mezo_neve']] []= ... $days[$row['veg_datum_mezo_neve']] []= ...

    Jelenleg kiválasztok egyetlen napot. Akkor felsorolja az összes hozzáköthető napot.(napokra és eseményekre bontva.)  Nekem annyi elég lenne hogy egy napon belül kellene a csoport összes eseményét felsorolni. 
    Jelenleg:
    Dátumkiválasztás: 2018.01.01-2018.01.01
    Kiíratás ("ezek az események egy csoportba tartoznak"):
    2018.01.01
    Kezdet: 2018.01.01 Vég: 2018.01.05  Leírás: 1. szakasz
    2018.01.05
    Kezdet: 2018.01.05 Vég: 2018.01.05  Leírás: 2. szakasz

    (Jelen lekérdezéssel kapcsolja a 01.05-öt az elsejére.)

    Nekem ennyi elég lenne:
    2018.01.01
    Kezdet: 2018.01.01 Vég: 2018.01.01  Leírás: 1. szakasz
    Kezdet: 2018.01.05 Vég: 2018.01.05  Leírás: 2 szakasz
    Mutasd a teljes hozzászólást!
  • Köszi az eddigi segítségeid. :)
    Mutasd a teljes hozzászólást!
  • Most elég kevés időm van, de még mindig nem értem a dolgot

    "Jelenleg":

    2018.01.01
    Kezdet: 2018.01.01 Vég: 2018.01.05 Leírás: 1. szakasz
    2018.01.05
    Kezdet: 2018.01.05 Vég: 2018.01.05 Leírás: 2. szakasz

    Tehát az első esemény 2018.01.01 - 2018.01.05 között van, a második esemény pedig 2018.01.05 napon (a kezdet és a vég dátum is jan. 5).

    "Ami neked elég lenne":

    2018.01.01
    Kezdet: 2018.01.01 Vég: 2018.01.01 Leírás: 1. szakasz
    Kezdet: 2018.01.05 Vég: 2018.01.05 Leírás: 2 szakasz

    Itt már az első esemény csak 2018.01.01 és a második pedig maradt 2018.01.05.

    Az világos, hogy ez a 2 esemény (szakasz) ugyanabban a csoportban van, de hogy a búbánatba jöhet ki (logikailag) az első esemény végdátumára a 2018.01.01?
    Mutasd a teljes hozzászólást!
  • Szia.

    Pl. létezik egy futóverseny (ez lenne a "csoport") ami két részből áll. Az első rész pl. 2018.01.01-én és 2018.01.05-én lenne.
    A második rész pl. 2018.01.10-én és 2018.01.12.-én lenne.
    Van egy daterange választónk ahol pl. egy napot választok ki ezt:
    2018.01.01
    Ekkor a futóverseny mindkét tagját kellene kiíratni:
    2018.01.01  Kiíratás:
    verseny 1.szakasz Ekkor:2018.01 és ekkor: 2018.01.15
    Verseny 2. szakasz Ekkor 2018.01.10 és ekkor: 2018.01.12

    Tehát ne külön kapcsolja a csoport napjait és külön írja ki a csoporthoz tartozó napokat, hanem egybe listázza a csoporthoz tartozó eseményeket arra napra/napokra , amelyet kiválasztott a daterange-ből.
    Mutasd a teljes hozzászólást!
  • Egy esemény mindig 2 napból áll (vagy 1-ből, ha a 2 dátum egyezik), tehát nem lehet sosem pl. 3?
    Én eddig azt hittem, hogy ez egy intervallum.
    Mutasd a teljes hozzászólást!
  • Természetesen lehet , ezt csak példaként írtam. Nerm , itt elég csak a kezdet ill. vég dátumot feltüntetni ill. arra rákeresni. A két dátum közt eltelt intervallum teljesen mindegy. A tegnapi lekérdezésed pl. ha 2018.01.01 -es dátumra keresnék akkor , ezt adja vissza:
    2018.01.01
    verseny 1.szakasz Ekkor:2018.01 és ekkor: 2018.01.15

    2018.01.15
    verseny 1.szakasz Ekkor:2018.01 és ekkor: 2018.01.15

    2018.01.10
    Verseny 2. szakasz Ekkor 2018.01.10 és ekkor: 2018.01.12

    2018.01.12
    Verseny 2. szakasz Ekkor 2018.01.10 és ekkor: 2018.01.12
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd