SELECT cu UNION in clasa pdo_mysqli

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
andras
Mesaje: 430

SELECT cu UNION in clasa pdo_mysqli

Salut,
Am un SELECT de genul (simplificat):

Cod: Selectaţi tot

<?php
$re = "SELECT
`bufer_id`, 'A' as `ident`, 'cheltuieli materiale' as `tipchelt`, '' as `detalii`,  `nr_nota`, `tip_nota`, `data_doc`, `aredoc`
`cont_db`, `cont_cr`, sum(`valoare`)
FROM `bufer` WHERE `cont_db` LIKE '%301%' GROUP BY `nr_nota`, `data_doc`
UNION SELECT
`bufer_id`, 'B' as `ident`, 'cheltuieli materiale' as `tipchelt`, '' as `detalii`,  `nr_nota`, `tip_nota`, `data_doc`
`cont_db`, `cont_cr`, sum(`valoare`) , `aredoc`
FROM `bufer` WHERE `cont_db` LIKE '%601%' GROUP BY `nr_nota`, `data_doc`";
?>
care se executa in phpmyadmin dar cu $rows = $conn->sqlExec($re); afiseaza doar true . Cum as putea face SELECT-ul sa fie executat si de clasa pdo_mysqli? O solutie ar fi sa fac fiecare select separat si sa le pun intr-o tabela la care sa adaug fiecare astfel se select. Ideea e ca rezultatul total sa-l afisez intr-o tabela html. Se poate? Multumesc.

MarPlo
Salut
Am testat clasa pdo_mysqli si cu UNION, functioneaza corect.
Exemplu, tabel "testclass":

Cod: Selectaţi tot

id   url                         title             dt
3   https://marplo.net/         Free Courses       1455023860
4   https://coursesweb.net/     Free Web Courses   1455023912
5   https://coursesweb.net/     Free Web Courses   1455036107
6   https://coursesweb.net/     Free Web Courses   1455036178
Cod php Selectul cu Union:

Cod: Selectaţi tot

//Select with Union
$sql ='(SELECT id, url FROM testclass WHERE id =4) UNION (SELECT id, title FROM testclass WHERE id >4) ORDER BY id DESC';
$resql = $conn->sqlExec($sql);

echo '<pre>';
var_export($resql); 
Output:

Cod: Selectaţi tot

array (
  0 => array (
    'id' => 6,
    'url' => 'Free Web Courses',
  ),
  1 => array (
    'id' => 5,
    'url' => 'Free Web Courses',
  ),
  2 => array (
    'id' => 4,
    'url' => 'https://coursesweb.net/',
  ),
)
Nu stiu de ce la tine nu merge, poate e ceva in codul SQL sau in legatura cu alt cod din script legat de clasa pdo_mysqli.
- Numele de coloane /tabel nu se pun intre ghilimele (cum e in codul tau de ex. 'A').

Ca alternativa, poti sa unesti mai multe rezultate Select cu array_merge().
Exemplu:

Cod: Selectaţi tot

//Without Union, with 2 Select merged into one array
$sql1 ='SELECT id, url FROM testclass WHERE id =4';
$sql2 ='SELECT id, title FROM testclass WHERE id >4';
$resql = array_merge($conn->sqlExec($sql1), $conn->sqlExec($sql2));

var_export($resql); 

andras
Am descoperit cauza, acum functioneaza fara probleme. Cauza era ca dupa instructiunea SELECT eu treceam imediat pe linia urmatoare cu datele din select si probabil clasa a interpretat ca nu exista date care se cer. Deci dupa SELECT trebuie neaparat sa urmeze instructiunile in acelasi rind. Multumesc!

MarPlo
Am modificat in codul clasei de pe site sa functioneze si in astfel de situatii, cand dupa instructiunea de inceput urmeaza direct un alt rand.

Edit:
- Am mai facut o modificare la clasa, pentru eficientizare; elibereaza memoria de datele dintr-o variabila ($mode) din sqlExec(), care dupa procesare nu mai sunt necesare.

Subiecte similare