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 Mesaje: 4343
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 Mesaje: 430
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 Mesaje: 4343
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