Autor Zpráva
Akali
Profil
Ahoj, nějak nemůžu udělat SQL dotaz na výpis ze stejně složených tabulek.. script

<?php
//nastavení výsledků na stránku:
  $vysledku=$pocet>0 ? $pocet : 1;
  $strana= (int)$_GET['strana'] == 0 ? 1 : (int)$_GET['strana']; //číselná hodnota ?strana=
  $od= ($strana-1)*$vysledku;

// Správné nastavení češtiny.
$objekt_vysledku = mysqli_query($db_spojeni,"SET NAMES 'UTF8'");

// zjištění počtu řádků v tabulce:
$radku=MySQLi_Fetch_Row(MySQLi_Query($db_spojeni,"SELECT COUNT(3) FROM postel_bukova"));
$stranek=Ceil($radku[0]/$vysledku);

// Zaslání SQL příkazu do databáze.
$radit=Empty($_GET['select']) ? "ID" : MySQL_Escape_String($_GET['select']);
$objekt_vysledku = mysqli_query($db_spojeni,$sql="SELECT * FROM postel_bukova, postel smrkova, postel_calounena ORDER BY $radit LIMIT $od,$vysledku")  Or Die(MySQLi_Error());



// Zobrazení všech vrácených dat.
while ($radek = mysqli_fetch_array($objekt_vysledku))
{
  /*oříznutí textu*/ 
  $radek['text'] = substr($radek['text'], 0, 500);
  $radek['cena'] = number_format($radek['cena'], 0, ',', ' '); // 2,500,000.44 
 

  echo "<div id=\"".(++$m % 2 ? "licha" : "suda")."\">\n";   
       echo "<div id=\"".(++$d % 2 ? "obrazek_suda" : "obrazek_licha")."\">
             <div style=\"text-align:center; margin-top:10px;\"> <a href=\"http://nabytek-elias.cz/sortiment/".$jake_zbozi."/zbozi.php?item=",$radek['ID'],"\"><div style=\"height:160px;\">",$radek['img'],"</div></a>
             </div><div id=\"cena\"> ",$radek['cena']," ,-</div></div>\n";

         echo "<div id=\"informace\"><a class=\"odkaz_detail\" href=\"http://nabytek-elias.cz/sortiment/".$jake_zbozi."/zbozi.php?item=",$radek['ID'],"\">",$radek['nazev'],"</a>",$radek['text']," ...\n";
       echo "</div>\n";  
  echo "</div> <br><br>\n\n\n";
   }
   
  echo "<div style=\"text-align: left; \"><i>Počet stránek:$stranek Aktuální stránka:$strana  Nalezeno objektů:$radku[0]</i></div>";

// povolení sloupců 
$raditPodle=Array('ID','cena');
$radit=in_array($_GET['select'],$raditPodle) ? $_GET['select'] : 'cena';


Echo '<div style="text-align: left; ">';
  Echo 'Strana: ';
  For($i = 1; $i <= $stranek; $i++) echo '<a href="'.$_SERVER["SCRIPT_NAME"].'?pocet='.$pocet.'&select='.$_GET["select"].'&strana='.$i.'">'.$i.'</a>'.($i < $stranek ? ', ' : null);
Echo '</div>'; 
?>


Na netu jsem viděl příklad tak, jak to mám udělné já, ale někde mám nejspíš něco špatně
Kcko
Profil
Akali:
Na co se ptáš? Co ti nefunguje?
Akali
Profil
řádek 16, když nechám takto, jak je o příspěvek výš, tak to nefunguje.

Ale když to udělám takto
$objekt_vysledku = mysqli_query($db_spojeni,$sql="SELECT * FROM postel_bukova ORDER BY $radit LIMIT $od,$vysledku")  Or Die(MySQLi_Error());

tak to funguje. Potřebuju udělat výpis ze 3 tabulek (postel_bukova, postel smrkova, postel_calounena)
Když ten sql dotaz udělám jenom pro jednu tabulku, funguje to, ale když udělám sql dotaz na 3 tabulky, nefunguje to
Kcko
Profil
Co znamená funguje resp. nefunguje? Chybové hlášky, požadovaná data? Neznám ani strukturu tabulek a co má být přesně cílem.
Akali
Profil
Nefunguje, tím myslím, že to vyhazuje tuhle chybu http://nabytek-elias.cz/sortiment/postel.php
pokud za FROM dám jendu tabulku, tak to jede tak, jak má.. Struktura tabulky je ->

CREATE TABLE IF NOT EXISTS `postel_bukova` (
  `ID` int(11) NOT NULL auto_increment,
  `nazev` varchar(100) collate cp1250_czech_cs default NULL,
  `cena` int(100) default NULL,
  `text` varchar(800) collate cp1250_czech_cs default NULL,
  `img` text collate cp1250_czech_cs,
  `img_2` text collate cp1250_czech_cs NOT NULL,
  `cena_bd` int(255) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1250 COLLATE=cp1250_czech_cs AUTO_INCREMENT=17 ;


Teď stručně, potřebuji udělat jedním sql dotazem výpis ze tří tabulek (jsou všechny stejné, akorát mají jiná data)
Kcko
Profil
Primárně jsi měl mít vše v jedné tabulce.

Dotaz si uprav na

SELECT tmp.* FROM
(
SELECT * FROM postel_bukova
UNION ALL
SELECT * FROM postel_smrkova
UNION ALL
SELECT * FROM postel_calounena

) as tmp

ORDER BY $radit LIMIT $od,$vysledku
Akali
Profil
To je přesně to, co potřebuji.. Mockrát děkuju.
Akali
Profil
Ještě bych teda měl jeden dotaz. Dá se při tom výpisu zjistit, z jaké tabulky se to vypisuje?
candiess
Profil
a co kdybys dal
$objekt_vysledku = mysqli_query($db_spojeni,$sql="SELECT * FROM postel_bukova, postel smrkova, postel_calounena ORDER BY $radit LIMIT $od,$vysledku")  Or Die(MySQLi_Error());



// Zobrazení všech vrácených dat.
while ($radek = mysqli_fetch_array($objekt_vysledku)) {
$text_postel_bukova = $radek["postel_bukova.text"];
.....
}


když dáš jen $radek["text"] tak je to blbost, protože tenhle řádek mají všechyn tři tabulky .. ale když dáš $radek["bukova_postel.text"] tak tam už je specifikované, z které tabulky :)
jenikkozak
Profil
Akali:
Rozdělení dat z jedné tabulky do více má většinou důvody pro optimalizaci vyhledávání či měnění dat. Zdá se však, že ty takový důvod nemáš. Doporučuji proto data sjednotit do jedné tabulky s přidáním sloupce rozlišujícím, o jaký typ dřeva na použití postele se jedná.

Vážně musíš mít sloupec img a img_2 s typem „text“? Říká se, že obrázek je jako tisíc slov, v tomto případě by to bylo 65 obrázků. :-)
Cenu s typem int(100) si také dost dobře nedokážu představit. To by musela být pořádná postel. Navíc ta cena může být i záporná.
Raději ani nedumám nad tím, co má být ve slouci cena_bd s typem int(255).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0