Topic: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Turiu lentelę pavadinimu: done

Ją sudaro:
user_id (INT)
post_id (INT)
action (INT)

Kaip reikia ištraukti duomenis ir juos atvaizduoti kai noriu, kad:

Viena užklausa patikrinti ar egzistuoja eilutės pasirinktuose postuose:

user_id 5
post_id tarkime 22, 36, 47, 49

Ko aš noriu:
Sužinoti ar egzistuoja tokia eilutė poste: 22, 36, 47, 49

Turėtų būti kažkas panašaus į (tiksliai nezinau):
Select * FROM done WHERE user_id = 5 AND post_id IN (22, 36, 47, 49)

Esmė kodėl aš to noriu:
Puslapis pakrauna 20 įrašų ir kiekvienam vykdyti po užklausą yra nelogiška. Tad noriu vienu kartu ištraukti visus susijusius įrašus o po to atvaizduoti.

Jei neaiškiai paaiškinau klauskite. Ačiū

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Viskas aišku, ir užklausa panaši į teisybę.

Klausimas yra - kas tau neaišku, kas nesigauna?

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Mindaugai, įtariu, kad problema yra tame, kad nesugebu po to tinkamai atvaizduoti.

Pati užklausa veikia.

Paskui daleiskime turiu:
$posto_numeris '36';

Ir man reikia žinoti ar tarp tų ištrauktų eilučių buvo įrašas, kuriame:
user_id 5
post_id 36

Ir t.t.

Visa procedūra:
Pasikrauna 20 įrašų, su skirtingais ID
Tuomet aš iš done lentelės ištraukiu įrašus susijusius su tais postais, kurių id 22,36,47,49
Ir jeigu egzistuoja tokia eulutė kur: user_id 5 post_id 36

Nelabai sugebu tinkamai ir suprantamai išaiškinti, bet tikiuosi esmę pavyks suprasti.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Nu faktas, kad nesugebi tinkamai paaiškinti. Vadinasi bėda yra gal tame, kad neinai realiai, kaip turi veikti.

Galiu tik spėti, kad dvi užklausos(pakrauti visus įrašus, ir tik tuos kuriuos reikia) gali būti apjungtos per LEFT JOIN į vieną užklausą. Ir tokiu būdu galima turėti visus įrašus plius, tų įrašų, kurių reikia, papildomi duomenys.

Antras dalykas, čia kažkoks neišbaigtas sakinys:

Ir jeigu egzistuoja tokia eulutė kur: user_id 5 post_id 36

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

duok mum sample irasu ir kokio tikiesi rezultato, tada gal kazka subursim :)

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Na gal dabar detaliau šiek tiek pamėginsiu nupasakoti.

štai užklausa, kuri ištraukia visą susijusią informaciją apie tam tikrus postus.

    $query = array(
        'SELECT'    => 'u.email, u.title, u.url, u.location, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, u.avatar, u.avatar_width, u.avatar_height, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.plus, p.minus, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online',
        'FROM'        => 'posts AS p',
        'JOINS'        => array(
            array(
                'INNER JOIN'    => 'users AS u',
                'ON'            => 'u.id=p.poster_id'
            ),
            array(
                'INNER JOIN'    => 'groups AS g',
                'ON'            => 'g.g_id=u.group_id'
            ),
            array(
                'LEFT JOIN'        => 'online AS o',
                'ON'            => '(o.user_id=u.id AND o.user_id!=1 AND o.idle=0)'
            ),
        ),
        'WHERE'        => 'p.id IN ('.implode(',', $posts_id).')',
        'ORDER BY'    => 'p.id'
    );

Lentelė done:

| user_id | post_id |
|    7       |    36     |
|    7       |     25    |
|    4       |     78    |

Kaip atvaizduojant postus reikėtų žinoti ar yra toks įrašas done lentelėje?

Tarkime atvaizduojame: 36 postą
Ir kaip žinoti, ar yra done lentelėje įrašas, kuris: user_id 7 AND post_id 36

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Nu tai tu prijunk tą done lentelę prie pirmos užklausos ir turėsi tada jau visus reikiamus duomenis viename rezultate.

O kaip tikrinti, tai:

if(<tikrinimo sąlyga>) ...

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Būtent to ir nemoku padaryti, tai yra prijungti prie užklausos.

Nes kiekvienas vartotojas turės skirtingą user_id.

Tikrinti jau mokėsiu.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

O koks yra ryšys tarp posts lentelės ir tarp done? 1:1, 1:N, N:N?

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

posts lentelėje visa informacija susijusi su pranešimais. done lentelėje duomenys ar narys jau atliko tam tikrą veiksmą tam pranešime.

Galima sakyti, kad tai panašu į ačiū modifikaciją.

Vartotojas paspaudęs ačiū yra įrašomas į done lentelę: user_id (nario_id) , post_id (posto už kurį balsavo id)

Ir tuomet kai jau atvaizduoju pranešimus noriu, kad pranešime matytosi ar narys jau sakė ačiū.

Atvaizduojant 36 pranešimą, o nario id tarkime 7:
Jei lentelėje done egzistuoja įrašas su duomenimis: user_id =7 AND post_id = 36
Atvaizduoti, kad jau sakėte ačiū.

Iš atvaizdavimo pusės suprantu kaip tai padaryti, tačiau su MySQL žiniomis - bėda.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Na aš klausiau koks ryšys, o tu man pasakoji ilgą istorija (-;

įsivaizduoju, kad ryšys yra 1:1, todėl galima prie posts lentos prijungti done lentą per LEFT JOIN. Kaip jau yra padaryta su kitom lentom ir papildomai iš done lentos filtruoti vartotojo_id, kuriam duomenys yra atvaizduojami. O į SELECT laukus nelabai svarbu ką pridėsi. Jeigu tame lauke bus NULL, vadinasi niekas nieko nebalsabo, nesakė ačiū ar dar ko nedarė. O jeigu bus duomenys, vadinasi vartotojas ten jau "apsiformino".

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Taip, būtent tokio sprendimo ir reikia. Tik nežinau kaip tiksliai reikia įgyvendinti tokį būdą.

Gal galėtumėt duoti pavyzdį kaip tinkamai prijungti, nes tas ON mane šiek tiek glumina.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Tai tavo duotoje užklausoje jau yra pavyzdys. (-;

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Taip, tačiau ką šiuo atveju reikėtų į ON rašyti nežinau.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

į ON yra rašomos sąlygos, pagal ką sujungiamos lentelės.

Ten galima ir nieko nerašyt arba viską nukelt į WHERE sekciją.

Jeigu nežinai pagal ką sujungti konkrečias lentas, tai kažkur kažką praleidai....

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Viskas, galutinai išsiaiškinau kaip visas šis reikalas veikia. Pritaikiau, veikia kaip uoga. :) Didžiulis AčIū.

Re: Tam tikrų duomenų ištraukimas ir atvaizdavimas

Sveiki. Su šventėmis.
Nenorėjau kurti naujos temos, todėl pasirinkau šią.
Reikalinga pagalba.
Turiu dvi užklausas :

$result = $mysqli->query( "SELECT sandelio_kodas,pavadinimas,aprasymas FROM Pozicija WHERE id IN (
                    SELECT pozicijos_id FROM preke WHERE id IN (   
                        SELECT prekes_id FROM akcija".$id.")) ");

$gamint = $mysqli->query( "SELECT pavadinimas FROM gamintojas WHERE id IN (
                    SELECT gamintojo_id FROM preke WHERE id IN (   
                    SELECT prekes_id FROM akcija".$id.")))");

Noriu apjungti jas į vieną, bet nesugalvoju, kaip. Mysql manuale radau operatorių JOIN, bet niekaip nesigauna jo "priklijuoti". Gal kas patarsit, kaip galiu sujungti abi užklausas?