MySql select, JOIN

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Zbynas 12. 4. 2020 04:00

Zdravím, potřeboval bych načíst data z více tabulek najednou, a to takto:

1) přes select se klasicky načte tabulka users
2) je ale nutné seřadit výsledky tak, aby se sečetly všechny hodnoty v tabulce data ve sloupci value u každého uživatele a porovnalo je s daty vlastního uživatele (udělalo rozdíl mezi hodnotami) a seřadilo se to od nejmenší.

Tudíž budeme mít dva řádky (nebudeme načítat samozřejmě vlastní id):
s user id 2 máme rozdíly: 4, 4, 7, tedy dohromady 15
s user id 3 máme rozdíly: 4, 0, 3, tedy dohromady 7

Tudíž první řádek bude id 3 a pak 2. A do něčeho by to mělo vypsat i tu spočítanou hodnotu.
Pokud chybí data v tabulce s vlastními údaji nebo ostatními údaji, měl by být rozdíl 0.
A mělo by to umět filtrovat jen třeba podle věku (rozmezí) v tabulce users ...
A aby to vrátilo jen ty výsledky, kde je rozdíl menší než třeba 10 ...
Tuším, že to půjde přes JOIN, ale vůbec mi to nejde spatlat. Pomůžete pls?


Příklad, naše id_user je 1.

Tabulka data
Kód: Vybrat vše
----------------------------------
|   id   |   id_user  |  value   |
----------------------------------
|   1    |      1     |    7     |
----------------------------------
|   2    |      1     |    4     |
----------------------------------
|   3    |      1     |    2     |
----------------------------------
|   4    |      2     |    3     |
----------------------------------
|   5    |      2     |    8     |
----------------------------------
|   6    |      2     |    9     |
----------------------------------
|   7    |      3     |    3     |
----------------------------------
|   8    |      3     |    4     |
----------------------------------
|   9    |      3     |    5     |
----------------------------------


Tabulka users
Kód: Vybrat vše
-----------------------------
|   id   |   user  |   age  |
-----------------------------
|   1    |   asvba |   24   |
-----------------------------
|   2    |   Fasdf |   35   |
-----------------------------
|   3    |   Csfew |   42   |
-----------------------------
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Emil Pastelka 12. 4. 2020 22:26

Připojíte se do DB a zkombinujete hodnoty z tabulky uživatelů s hodnotami tabulky data.
Kód: Vybrat vše
$databaze = mysqli_connect(); 
$dotaz = "SELECT * FROM jmeno-tab-users INNER JOIN jmeno-tabulky-data ON id = id_user"; 
$vysledekdotazu = mysqli_query($databaze, $dotaz);


Zobrazení, předpokládám PHP, pak bude třeba v tabulce
Kód: Vybrat vše
<table> 
<tr> 
   <th>ID uživatele</th>
   <th>Jméno uživatele</th>
   <th>Věk uživatele</th>
   <th>Hodnoty</th> 
</tr> 

<?php
if ( mysqli_num_rows( $vysledekdotazu) > 0 ) {
  while ( $hodnota = mysqli_fetch_array( $vysledekdotazu ) ) {
    ?>
<tr>
    <td><?php echo $hodnota["id_user"];?></td>
    <td><?php echo $hodnota["user"];?></td>
    <td><?php echo $hodnota["age"];?></td>
    <td><?php echo $hodnota["value"]; ?></td>
</tr>
<?php
}
}
?>
</table>


K práci s tabulkou pak můžete použít nějakou JS knihovnu. Třeba tablesorter - https://mottie.github.io/tablesorter/docs/
Nicméně s tím součtem hodnot jsem Vás nějak nepochopil. Příklad výše je spíše popisný a vypíše všechny výsledky.
Pokud chcete experimentovat s formou zápisu a JS na frontendu není žádoucí pak další příklad je na:
https://www.w3schools.com/php/php_mysql ... rderby.asp
Emil Pastelka
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 15. 4. 2020 05:54

J8 stále ten JOIN nechápu, asi jsem úplně tupý. Chápu, že za id = id_user se přiřadí tento řádek těchto tabulek, ale jak z toho dostanu z té druhé tabulky třeba nick? Do které proměnné se to uloží? A kam mám zapsat WHERE pro druhou tabulku? (Např. where age>18) ...

Moc moc díky předem ...

-- 15. 4. 2020 05:59 --

Dokázali byste tohle přepsat do mysql dotazu, já to z toho už pochopím?

vyber z tabulky "dotaznik" vše,
nahrad v tabulce "dotaznik" "id_user" za "nick" v tabulce "users" tam, kde "age" je vetší než 18, sluč všechny řádky "id_user" (SUM?) do jednoho a sečti z těchto sloučených řádků všechny hodnoty "value".

Pak ten dotaz ještě rozšíříme, pro začátek tohle :D Pokud to někdo dá, fakt budu mega moc šťastnej! :)

PS bude se vybírat (WHERE) v obou tabulkách, v tabulce dotazník bude podmínka, že id_user != vlastní id a v tabulce users bude podmínka age > x ... No tvl :shock: :/ :mrgreen:
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Doggg 15. 4. 2020 06:55

Zbynasi možná kdyby ses dokázal na dvakrát vyjádřit o co ti jde a nemichal svoje představy o excelu do SQL bylo by to lepší a možná by se ti dostalo i nějaké odpovědi. To co ti radi EP je vylistovat všechna data, která lze spojit joinem (tedy dostaneš záznamy které lze naparovat) a ty výpočty / sumy /filtry / řazení udělat na prezentační vrstvě.

Ale bohužel, zatím si nás ochudil, o ten zbytek toho co vypadá jako zadání domácího úkolu.
Doggg
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků