הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 29-05-17, 16:14   # 1
MasterNetwork
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
הודעות: 653

MasterNetwork לא מחובר  

MySQL: הצגה מ-2 טבלאות ללא מיזוג

היי חברים, אני רוצה לבצע חיפוש בשני טבלאות שונות ולקבל את מבנה הטבלה המקורית בלבד.
ללא מיזוג השורות.

דוגמא:
קוד:
id,fname,lname,city
=============
1,dani,biton,tel aviv
2,avi,kahlon,ramat gan

id,pname,pdesc,price
=============
1,vaccum cleaner,blah,12
2,vaccum pump,blah,12
אני רוצה לבצע חיפוש בשניהם, אך להציג את השורות לפי מבנה המקורי ללא מיזוג.
אשמח לעזרה ותודה מראש!
  Reply With Quote
ישן 29-05-17, 19:57   # 2
Makeapp
עסק רשום [?]
 
Makeapp's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jul 2014
הודעות: 73

Makeapp לא מחובר  

תסביר את עצמך קצת יותר ואולי אצליח להבין.
__________________



בניית אתרים - פיתוח מערכות מידע - שירותי ענן - עיצוב גראפי - אפליקציות
טל. 054-3536-304 - דוא"ל. hostarltd@gmail.com
  Reply With Quote
ישן 29-05-17, 22:03   # 3
MasterNetwork
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
הודעות: 653

MasterNetwork לא מחובר  

מצטער על האי הבנה, יסביר יותר טוב עכשיו
נגיד וקיימות הטבלאות הבאות
ואני רוצה לחפש בשדות LIKE fname,lname,city
וגם בשדות pname,pdesc
כשבוחרים את 2 הטבלאות, עם או ללא JOIN זה מחזיר את זה מחובר.
fname,lname,city,pname,pdesc באותה השורה.

יש דרך לשמור על הצורה המקורית?
[0]=fname,lname,city
[1]=pdesc,pname

קוד:
users
======
id,fname,lname,city
=============
1,dani,biton,tel aviv
2,avi,kahlon,ramat gan

products
====
id,pname,pdesc,price
=============
1,vaccum cleaner,blah,12
2,vaccum pump,blah,12
  Reply With Quote
ישן 30-05-17, 10:30   # 4
anon
חבר בקהילה
 
anon's Avatar
 
מיני פרופיל
תאריך הצטרפות: May 2015
הודעות: 54

anon לא מחובר  

מקבלים תוצאה אחת ולא שתי תוצאות לכן התשובה היא לא.
אתה יכול ליצור כינויים (alias) ולקבל את זה כך

HTML קוד:
t1_id,t1_fname,t1_lname,t1_city,t2_id,t2_pname,t2_pdesc,t2_price
=============
1,dani,biton,tel aviv,1,vaccum cleaner,blah,12
2,avi,kahlon,ramat gan,2,vaccum pump,blah,12
=============
  Reply With Quote
ישן 30-05-17, 11:40   # 5
MasterNetwork
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
הודעות: 653

MasterNetwork לא מחובר  

אני רוצה לבצע חיפוש ולקבל את המקור שזה נמצא בו.
בנפרד, זה חיפוש או שם או שם. טבלאות לא צריכות להיות קשורות אחת לשניה.

באתר מה שקורה אני פשוט מסמן בצ'ק בוקס כל טבלה שאני רוצה לבצע בה את החיפוש.
ואז רציתי לקבל את התוצאות בדיוק כפי שהם נמצאו.

Last edited by MasterNetwork; 30-05-17 at 12:18..
  Reply With Quote
ישן 30-05-17, 14:41   # 6
anon
חבר בקהילה
 
anon's Avatar
 
מיני פרופיל
תאריך הצטרפות: May 2015
הודעות: 54

anon לא מחובר  

אז תריץ שתי שאילתות ותקבל שתי תוצאות
  Reply With Quote
ישן 30-05-17, 15:18   # 7
while1
חבר חדש
 
מיני פרופיל
תאריך הצטרפות: Jan 2015
הודעות: 34
Send a message via Skype™ to while1

while1 לא מחובר  

ציטוט:
נכתב במקור על ידי MasterNetwork צפה בהודעה
אני רוצה לבצע חיפוש ולקבל את המקור שזה נמצא בו.
בנפרד, זה חיפוש או שם או שם. טבלאות לא צריכות להיות קשורות אחת לשניה.

באתר מה שקורה אני פשוט מסמן בצ'ק בוקס כל טבלה שאני רוצה לבצע בה את החיפוש.
ואז רציתי לקבל את התוצאות בדיוק כפי שהם נמצאו.
לפי התיאור שלך, להריץ שאילתה אחת עבור 2 הטבלאות ביחד נשמע מסורבל ומיותר.
אם אין קשר בכלל בין הטבלאות, אז עדיף להריץ את החיפוש על כל טבלה בנפרד.

לצורך העניין:

PHP קוד:
if($table1_checked){
   
// sql where LIKE fname,lname,city
}

if(
$table2_checked){
   
// sql where LIKE pname,pdesc
}

// ... do whatever you want with each table 
ואם החיפוש הוא בכלל רק על טבלה אחת, אז אתה יכול לשנות ל else במקום להריץ את 2 השאילתות.


אם בכל מקרה אתה רוצה לקבל את המידע בתוצאה אחת, אפשר לעשות את זה כך:

קוד:
SELECT *
FROM `table1`
WHERE `fname` LIKE '%str%' OR `lname` LIKE '%str%' OR `city` LIKE '%str%'

UNION ALL

SELECT *
FROM `table2`
WHERE `pname` LIKE '%str%' OR `pdesc` LIKE '%str%'
שים לב שמספר העמודות שמוחזרות מכל טבלה חייב להיות זהה.
כלומר, אם אתה משתמש בכוכבית(*) אז צריך לוודא שבמקור 2 הטבלאות מכילות את אותו מספר עמודות, לדוגמא במקרה שלך - 4.
אם אתה בוחר את העמודות הספציפיות שאתה רוצה להחזיר, אתה חייב לציין ב2 השאילתות את אותו מספר עמודות.
אם בשאילתה אחת יש לך פחות עמודות, תחזיר עמודה נוספת ריקה או משהו אחר. (דוגמא לזה, בקוד הבא בהמשך הפוסט)

שים לב, שהמבנה(שמות) של העמודות יקבע לפי השאילתה הראשונה.
כלומר, אם אתה שולף את המידע דרך PHP וניגש למידע דרך השם של העמודה, אז השמות של העמודות בשאילתה הראשונה הן אלו שיהיו השמות שיוחזרו במערך.
ולכן, המידע שתקבל (מ2 טבלאות, עם שמות ועמודות שונים) יהיה מבולגן ולא תדע איזה מידע אתה מקבל מאיזו טבלה.
לחילופין, אפשר להתייחס לעמודות באופן מספרי, לפי הסדר שהן מוחזרות (כמו בדוגמא הבאה), אבל עדיין לא תדע איזה שורות/מידע שייך לאיזו טבלה.

דרך אחת לפתור את הבעיה הזאת היא להוסיף עמודה נוספת שתזהה את הטבלה, ואז התוצאה יכולה להיות משהו כזה:

PHP קוד:
$search $pdo->query("
   SELECT `id` , `fname` , `lname` , `city` , 'bla1'
   FROM `table1`
   WHERE `fname` LIKE '%str%' OR `lname` LIKE '%str%' OR `city` LIKE '%str%'
   
   UNION ALL
   
   SELECT `id` , `pname` , `pdesc` , NULL , 'bla2'
   FROM `table2`
   WHERE `pname` LIKE '%str%' OR `pdesc` LIKE '%str%'
"
);

while(
$data $search->fetch(PDO::FETCH_NUM)){
   if(
$data[4] === "bla1"){
      echo 
"data found on table1: id={$data[0]},fname={$data[1]},lname={$data[2]},city={$data[3]}";
   }
   else if(
$data[4] === "bla2"){
      echo 
"data found on table2: id={$data[0]},pname={$data[1]},pdesc={$data[2]}";
   }

אבל כאמור, זו כנראה דרך מסורבלת הרבה יותר, ודי מיותרת לדעתי. כשבוסופו של דבר, בעצם עושים את אותה פעולה (של תנאי, שבודק על איזו טבלה אנחנו עובדים - ופועל בהתאם).


**כל הקודים נכתבו בהודעה זו, בלי לבדוק. ייתכנו שגיאות תחביר/לוגיקה.

מקווה שעזרתי,
חג שמח.

Last edited by while1; 30-05-17 at 15:24..
  Reply With Quote
ישן 30-05-17, 19:34   # 8
MasterNetwork
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Jun 2007
הודעות: 653

MasterNetwork לא מחובר  

בסדר גמור הלוגיקה וגם התחבירים. רציתי לדעת אם להשתמש בUNION זה יהיה לי הכי הגיוני.
פשוט נדאג למס' עמודות זהה.
תודה רבה אחלה דיון, וחג שמח גם לכם
אגב, בעקרון הטבלאות כמעט זהות לחלוטין. חוץ מטבלה אחת שהיא שונה לגמרי.
החיפוש יתבצע על עמודות זהות ברוב הטבלאות.

קוד:
   SELECT `id` , `fname` , `lname` , `city` , 'bla1' AS `table_name`
להוסיף אליאס table_name , והבעיה נפתרה לגמרי.

תודה רבה, בדיוק התשובות שהייתי צריך.
חג שמח חברים!

Last edited by MasterNetwork; 30-05-17 at 20:49..
  Reply With Quote
ישן 04-06-17, 10:12   # 9
MisterEdry
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jun 2016
הודעות: 62

MisterEdry לא מחובר  

תסביר את עצמך יותר ואוכל לעזור לך
  Reply With Quote
ישן 25-06-17, 05:28   # 10
YYDevelopment
חבר בקהילה
 
YYDevelopment's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jun 2017
הודעות: 69

YYDevelopment לא מחובר  

בעבר גם אני נתקלתי בבעיה שרציתי להריץ 2 שאילות בבת אחת וניסיתי למצוא פיתרון. יש פקודה בשם mysqli_multi_query() שאמורה לאפשר לך לעשות את זה וניתן לראות מידע נוסף על הפקודה בעמוד הבא:
https://www.w3schools.com/php/func_m...ulti_query.asp
זה היה לפני הרבה זמן וניסיתי גם לעבוד עם הפקודה אבל בסופו של דבר הגעתי למסקנה שיותר קל להשתמש ב-2 שאילתות שונות ולחבר את הנתונים למשתנה אחד.
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 03:49.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ