Autor | Zpráva | ||
---|---|---|---|
Akali Profil |
#1 · Zasláno: 26. 2. 2011, 11:40:30 · Upravil/a: Akali
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 |
#2 · Zasláno: 26. 2. 2011, 13:49:00
Akali:
Na co se ptáš? Co ti nefunguje? |
||
Akali Profil |
#3 · Zasláno: 26. 2. 2011, 14:01:13
řá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 |
#4 · Zasláno: 26. 2. 2011, 14:06:45
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 |
#5 · Zasláno: 26. 2. 2011, 14:19:29 · Upravil/a: Akali
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 |
#6 · Zasláno: 26. 2. 2011, 14:26:37
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 |
#7 · Zasláno: 26. 2. 2011, 14:34:43
To je přesně to, co potřebuji.. Mockrát děkuju.
|
||
Akali Profil |
#8 · Zasláno: 26. 2. 2011, 14:44:28
Ještě bych teda měl jeden dotaz. Dá se při tom výpisu zjistit, z jaké tabulky se to vypisuje?
|
||
candiess Profil |
#9 · Zasláno: 27. 2. 2011, 20:08:15
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 |
#10 · Zasláno: 28. 2. 2011, 14:15:36
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). |
||
Časová prodleva: 13 let
|
0