Pereiti prie turinio

[PHP/SQL] Kaip padaryti row su dviem skirtingom užklausom?


Rekomenduojami pranešimai

Sveiki, vėl reikia pagalbos. Tai ir pradėkim nuo pavyzdžio yra lentelė :

http://www.part.lt/img/c57b5e369b0ffccb1417321838de8a25253.png

Joje yra duomenys :

http://www.part.lt/img/34c2dacb72870e5d467151a4ceda3e34795.png

 

Ir reikia, kad kur `Vip` = 1 atvaizduotu du kartus : pirmą kartą atvaizduoja visus tik kur `Vip` = 1, poto pradeda atvaizduoti visus bendrai.

Bandžiau kažką kurti su UNION, UNION ALL bei keliais JOIN būdais vistiek nesigavo.. Darom su atskirom užklausom pjaunasi pagination.. Gal kas galit užvesti ant kelio, ar parašyti basic pavyzdį?

Dėkui iš karto! ^_^

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Atvaizduos

Pirmas puslapis : vip1, vip2, vip3

Antras puslapis : vip4, vip5, vip1

Trečias puslapis : nevip1, vip2, nevip2

Ketvirtas puslapis : vip3, nevip3, vip4,

Penktas puslapis : nevip4, vip5, nevip5.

Pirma atvaizdavo VISUS VIP, tada pradėjo atvaizduoti visus kitus

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Naudok UNION su LIMIT x OFFSET y del pagination:

(SELECT `name`,`about` FROM lentele WHERE `vip`=1 LIMIT 1,10)
UNION ALL
(SELECT `name`,`about` FROM lentele LIMIT 5,15)

Count del puslapiu skaiciaus:

SELECT COUNT(*)
FROM (
(SELECT `name`,`about` FROM lentele WHERE `vip`=1)
UNION ALL
(SELECT `name`,`about` FROM lentele)
) cnt; 

Papildomos informacijos:

http://dev.mysql.com/doc/refman/5.0/en/union.html

 

Paprastas PHP del pagination, gali buti klaidu, rasiau is galvos:

$puslapis     = 1;//tavo puslapis
$limit        = 3;
$vip_count    = get_vip_count();//grazina vip skaiciu, sakykim 5
$vip_offset   = ($puslapis - 1) * $limit;
$other_offset = ($puslapis * $limit <= $vip_count ? 0 : ($puslapis - ((int) ($vip_count / $limit)) - 1) * $limit - $vip_count % $limit);
$other_offset = $other_offset < 0 ? 0 : $other_offset;
$other_limit  = ($puslapis * $limit <= $vip_count ? 0 : ($puslapis * $limit - $vip_count > $limit ? $limit : $limit - ($vip_count % $limit)));
// Jei tik imanoma venkime UNION
$query        = $puslapis * $limit <= $vip_count + ($limit - ($vip_count % $limit))  ? 
"(SELECT `name`,`about` FROM lentele WHERE `vip`=1 LIMIT {$vip_offset},{$limit})
UNION ALL
(SELECT `name`,`about` FROM lentele LIMIT {$other_offset},{$other_limit})
;"
:
"SELECT `name`,`about` FROM lentele LIMIT {$other_offset},{$other_limit};";

 

P.s. turejau siek tiek laisvo laika, tad:

for($i=1;$i<6;$i++){
echo query($i)."</br>";
}

function query($puslapis){
$limit        = 3;
$vip_count    = 5;//grazina vip skaiciu, sakykim 5
$vip_offset   = ($puslapis - 1) * $limit;
$other_offset = ($puslapis * $limit <= $vip_count ? 0 : (($puslapis - ((int) ($vip_count / $limit)) - 1) * $limit - $vip_count % $limit));
$other_offset = $other_offset < 0 ? 0 : $other_offset;
$other_limit  = ($puslapis * $limit <= $vip_count ? 0 : ($puslapis * $limit - $vip_count > $limit ? $limit : $limit - ($vip_count % $limit)));
$query        = $puslapis * $limit <= $vip_count + ($limit - ($vip_count % $limit))  ? 
"(SELECT `name`,`about` FROM lentele WHERE `vip`=1 LIMIT {$vip_offset},{$limit})
UNION ALL
(SELECT `name`,`about` FROM lentele LIMIT {$other_offset},{$other_limit})
;"
:
"SELECT `name`,`about` FROM lentele LIMIT {$other_offset},{$other_limit};";
return $query;
}

 

Queries:

(SELECT `name`,`about` FROM lentele WHERE `vip`=1 LIMIT 0,3) UNION ALL (SELECT `name`,`about` FROM lentele LIMIT 0,0) ;
(SELECT `name`,`about` FROM lentele WHERE `vip`=1 LIMIT 3,3) UNION ALL (SELECT `name`,`about` FROM lentele LIMIT 0,1) ;
SELECT `name`,`about` FROM lentele LIMIT 1,3;
SELECT `name`,`about` FROM lentele LIMIT 4,3;
SELECT `name`,`about` FROM lentele LIMIT 7,3;

 

Rezultatai:

1: vip1 vip2 vip3
2: vip4 vip5 vip1
3: nevip1 vip2 nevip2
4: vip3 nevip3 vip4
5: nevip4 vip5 nevip5

Redagavo Ispirit
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...